您需要了解的有关 Linux 进程的所有信息 [综合指南]
在本文中,我们将了解进程的基本知识,并简要了解如何使用某些命令管理 Linux 中的进程。
进程是指正在执行的程序;它是程序的运行实例。它由程序指令、从文件读取的数据、其他程序或系统用户的输入组成。
流程类型
Linux 中基本上有两种类型的进程:
- 前台进程(也称为交互式进程)——这些进程通过终端会话初始化和控制。换句话说,必须有用户连接到系统才能启动此类进程;它们不会作为系统功能/服务的一部分自动启动。
- 后台进程(也称为非交互式/自动进程)——是未连接到终端的进程;它们不期望任何用户输入。
什么是守护进程
这些是特殊类型的后台进程,它们在系统启动时启动,并作为服务永远运行;它们不会消失。它们作为系统任务(作为服务运行)自发启动。但是,用户可以通过 init 进程控制它们。
在 Linux 中创建进程
一个新进程通常是在现有进程在内存中创建其自身的精确副本时创建的。子进程将拥有与其父进程相同的环境,但只有进程 ID 号不同。
Linux中创建新进程有两种常规方法:
- 使用System()函数——这种方法比较简单,但是效率低下,并且具有一定的安全风险。
- 使用 fork() 和 exec() 函数——这种技术有点先进,但提供了更大的灵活性、速度和安全性。
Linux 如何识别进程?
因为 Linux 是一个多用户系统,这意味着不同的用户可以在系统上运行各种程序,所以程序的每个运行实例都必须由内核唯一地标识。
程序由其进程 ID ( PID ) 及其父进程 ID ( PPID ) 来标识,因此进程可以进一步分为:
- 父进程——这些进程在运行时创建其他进程。
- 子进程——这些进程是在运行时由其他进程创建的。
Init 进程
Init进程是系统中所有进程的母进程(父进程),它是Linux 系统启动时执行的第一个程序;它管理系统中的所有其他进程。它由内核本身启动,因此原则上它没有父进程。
init 进程的进程 ID 始终为1。它充当所有孤立进程的养父进程。
您可以使用pidof 命令来查找进程的 ID:
# pidof systemd # pidof top # pidof httpd
要查找当前 shell 的进程 ID 和父进程 ID,请运行:
$ echo $$ $ echo $PPID
在 Linux 中启动进程
一旦你运行一个命令或程序(例如cloudcmd – CloudCommander),它将在系统中启动一个进程。你可以按如下方式启动一个前台(交互式)进程,它将连接到终端,用户可以向其发送输入:
# cloudcmd
Linux 后台作业
要在后台(非交互式)启动一个进程,请使用符号&
,这里,进程直到移到前台才会读取用户的输入。
# cloudcmd & # jobs
您还可以通过使用 暂停进程将其发送到后台[Ctrl + Z]
,这将向进程发送SIGSTOP信号,从而停止其操作;它变为空闲状态:
# tar -cf backup.tar /backups/* #press Ctrl+Z # jobs
要在后台继续运行上面暂停的命令,请使用bg命令:
# bg
要将后台进程发送到前台,请使用fg命令和作业 ID,如下所示:
# jobs # fg %1
你可能还喜欢:如何在后台启动 Linux 命令并在终端中分离进程
Linux 中的进程状态
在执行过程中,进程会根据其环境/情况从一种状态变为另一种状态。在 Linux 中,进程具有以下可能的状态:
- 运行——这里它要么正在运行(它是系统中的当前进程),要么已准备好运行(它正在等待分配给其中一个 CPU)。
- 等待– 在此状态下,进程正在等待事件发生或系统资源。此外,内核还区分两种类型的等待进程:可中断等待进程 – 可以通过信号中断;不可中断等待进程 – 直接等待硬件条件,不能被任何事件/信号中断。
- 已停止– 在此状态下,进程已停止,通常是通过接收信号。例如,正在调试的进程。
- 僵尸- 此时,一个进程已经死亡,它已被停止,但它仍然在进程表中有一个条目。
如何在 Linux 中查看活动进程
有几种 Linux 工具可用于查看/列出系统上运行的进程,其中两个传统且众所周知的是ps和top命令:
1. ps 命令
它显示有关系统上活动进程的选择的信息,如下所示:
# ps # ps -e | head
2. top – 系统监控工具
top 是一个强大的工具,它为您提供正在运行的系统的动态实时视图,如下面的屏幕截图所示:
# top
阅读本文了解更多 top 用法示例:Linux 中的 12 个 TOP 命令示例
3. Glances – 系统监控工具
Glances是一个相对较新的系统监控工具,具有以下高级功能:
# glances
有关全面的使用指南,请阅读:Glances – Linux 的高级实时系统监控工具
您可以使用其他几个有用的 Linux 系统监控工具来列出活动进程,打开下面的链接阅读有关它们的更多信息:
如何控制 Linux 中的进程
Linux 还有一些用于控制进程的命令,例如 kill、pkill、pgrep 和 killall,下面是一些如何使用它们的基本示例:
$ pgrep -u example top $ kill 2308 $ pgrep -u example top $ pgrep -u example glances $ pkill glances $ pgrep -u example glances
要深入了解如何使用这些命令来杀死/终止 Linux 中的活动进程,请打开以下链接:
请注意,当您的系统冻结时,您可以使用它们来终止Linux 中无响应的应用程序。
向进程发送信号
在 Linux 中控制进程的基本方式是向进程发送信号。你可以向进程发送多种信号,要查看所有运行的信号:
$ kill -l
要向进程发送信号,请使用我们前面提到的 kill、pkill 或 pgrep 命令。但程序只有在被编程为识别信号时才能响应信号。
大多数信号都是系统内部使用,或者程序员写代码时使用。以下是对系统用户有用的信号:
- SIGHUP 1 – 当某个进程的控制终端关闭时发送给该进程。
- SIGINT 2 – 当用户按下 中断进程时,由其控制终端发送给进程
[Ctrl+C]
。 - SIGQUIT 3 – 如果用户发送退出信号,则发送给进程
[Ctrl+D]
。 - SIGKILL 9 – 此信号立即终止(杀死)一个进程,并且该进程将不会执行任何清理操作。
- SIGTERM 15 — 这是程序终止信号(kill 默认会发送此信号)。
- SIGTSTP 20 – 由其控制终端发送给进程以请求其停止(终端停止);由用户按下 发起
[Ctrl+Z]
。
以下是 Firefox 应用程序冻结后使用其 PID 终止该应用程序的终止命令示例:
$ pidof firefox $ kill 9 2687 OR $ kill -KILL 2687 OR $ kill -SIGKILL 2687
要使用其名称终止应用程序,请使用 pkill 或 killall,如下所示:
$ pkill firefox $ killall firefox
更改 Linux 进程优先级
在 Linux 系统上,所有活动进程都具有优先级和特定的 nice 值。优先级较高的进程通常会比优先级较低的进程获得更多的 CPU 时间。
但是,具有 root 权限的系统用户可以使用nice和renice命令来影响这一点。
从top命令的输出中,NI显示了进程的nice值:
$ top
使用nice命令为进程设置一个 nice 值。请记住,普通用户可以将 0 到 20 之间的 nice 值分配给他们拥有的进程。
只有 root 用户可以使用负的 nice 值。
要重新调整进程的优先级,请使用renice命令,如下所示:
$ renice +8 2687 $ renice +8 2103
查看有关如何管理和控制 Linux 进程的一些有用文章。
- Linux 进程管理:启动、关闭以及其间的一切
- 在批处理模式下使用‘top’查找按内存使用率排名前 15 位的进程
- 在 Linux 中查找内存和 CPU 使用率最高的运行进程
- 如何在 Linux 中使用 PID 号查找进程名称
现在就这些了!如果您有任何问题或其他想法,请通过下面的反馈表与我们分享。