在 Ubuntu Linux 中管理进程
在 Linux 中管理进程是一个需要学习和理解的重要主题,因为它是一个多任务操作系统,并且有许多进程同时进行。 Linux 提供了许多用于管理进程的工具,例如列出正在运行的进程、终止进程、监控系统使用情况等。在 Linux 中,每个进程都由其进程 ID (PID) 表示。如果用户或组运行该进程,则该进程还有一些其他属性,例如用户 ID 和组 ID。有时您需要杀死某个进程或与某个进程交互,因此您应该知道如何管理这些进程以使您的系统顺利运行。在Linux中,可以使用ps、pstree、pgrep、pkill、lsof、top、nice、renice和kill等命令来管理进程。
流程
运行程序的实例称为进程。在Linux中,进程ID(PID)用于表示进程,每个进程都是独一无二的。有两种类型的流程,
后台进程
前台进程
后台进程
后台进程在终端中启动并自行运行。如果您在终端中运行一个进程,其输出将显示在终端窗口中,您可以与其交互,但如果您不需要与该进程交互,则可以在后台运行它。如果你想在后台运行一个进程,只需在命令末尾添加“&”符号,它就会开始在后台运行;它将节省您的时间,并且您将能够开始另一个过程。要列出后台运行的进程,请使用命令“jobs”。它将显示后台运行的所有进程。
例如,Linux 中的升级是一个漫长的过程。太费时间了,如果你想在系统升级过程中做其他事情,就使用后台命令。
它将开始在后台运行。同时您可以与其他程序进行交互。您可以通过键入此命令来检查有多少个进程以及哪些进程正在后台运行。
[1]+ Running sudo apt-get upgrade -y &
前台进程
默认情况下,我们在终端中运行的所有进程都作为前台进程运行。我们可以通过前台和后台命令来管理它们。
您可以通过键入“fg”命令后跟后台进程号,将作业中列出的任何后台进程带到前台。
sudo apt-get upgrade -y
如果您想将此进程置于后台,请输入此命令。
使用 ps 命令列出和管理进程
使用 ps 命令列出进程是查看终端运行进程的最古老的方法之一。键入 ps 命令可列出正在运行的进程、它们正在使用多少系统资源以及谁在运行它们。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
Jim 1562 0.0 0.0 164356 6476 tty2 Ssl+ 13:07 0:00 shell
Jim 1564 5.2 0.9 881840 78704 tty2 Sl+ 3:07 13:13 dauth
Jim 2919 0.0 0.0 11328 4660 pts/0 Ss 13:08 0:00 bash
Jim 15604 0.0 0.0 11836 3412 pts/0 R+ 17:19 0:00 ps u
...snip...
上表中的user列显示的是用户名,PID显示的是进程id。您可以使用 PID 来终止进程或向进程发送终止信号。 %CPU 显示CPU 处理器百分比,%MEM 显示随机存取内存使用情况。要终止进程,请键入。
或者
使用 ps aux 命令查看所有正在运行的进程,并添加一个管道以按顺序查看。
如果要重新排列列,可以通过添加标志 -e 来列出所有进程,并添加 -o 来通过 ps 中的关键字指示列来实现命令。
PID USER UID %CPU %MEM VSZ RSS COMMAND
1 root 0 0.1 0.1 167848 11684 systemed
3032 jim 1000 16.5 4.7 21744776 386524 chrome
...snip...
ps 命令的选项。
u 选项用于列出用户的进程。
f 选项用于显示完整列表。
x 选项用于在没有终端的情况下显示有关进程的信息。
e选项用于显示扩展信息。
一个选项用于列出终端的所有进程。
v选项用于显示虚拟内存格式。
ps 命令的标志。
-e 标志用于查看系统上的每个进程。
-u 标志用于查看以 root 身份运行的进程。
-f 标志用于进程的完整列表。
-o 标志用于在所需列中列出进程。
pstree
pstree 是另一个列出进程的命令;它以树格式显示输出。
pstree 命令的选项
-n 用于按 PID 对进程进行排序。
-H 用于突出显示进程。
ubuntu@ubuntu:~$ pstree -H 6457
-a 用于显示输出,包括命令行参数。
-g 用于按组 ID 显示进程。
-s 用于播种树或特定过程。
ubuntu@ubuntu:~$ pstree -s 6457
[userName] 用于显示用户拥有的进程。
ubuntu@ubuntu:~$ pstree jim
pgrep
使用 pgrep 命令,您可以根据某些条件查找正在运行的进程。您可以使用进程的全名或缩写来查找,也可以通过用户名或其他属性来查找。 pgrep 命令遵循以下模式。
ubuntu@ubuntu:~$ pgrep -u jim chrome
Options for pgrep command
-i 用于搜索不区分大小写
-d 用于分隔输出
-u 用于查找用户拥有的进程
-a 用于列出进程及其命令
-c 用于显示匹配进程的数量
-l 用于列出进程及其名称
pkill
使用 pkill 命令,您可以根据特定条件向正在运行的进程发送信号。您可以使用进程的全名或缩写来查找,也可以通过用户名或其他属性来查找。 pgrep 命令遵循以下模式。
ubuntu@ubuntu:~$ Pkill -9 chrome
Options for pkill command
-signal 用于发送信号,例如SIGKILL、SIGTERM 等
-HUP 用于重新加载进程
-f 用于基于完整命令行杀死进程。
-u 用于终止用户拥有的所有进程。
-i 用于 pkill 不区分大小写地终止进程。
-9 用于发送终止信号。
-15 用于发送终止信号。
lsof (List of Open Files)
该命令行实用程序用于列出多个进程打开的文件。众所周知,所有 UNIX/Linux 系统都将所有内容都识别为文件,因此使用 lsof 命令可以方便地列出所有打开的文件。
上表lsof命令中,FD代表文件描述,cwd代表当前工作目录,txt代表文本文件,mem代表内存映射文件,mmap代表内存映射设备,REG代表常规文件,DIR代表目录,rtd表示根目录。 lsof 命令还可以使用其他选项。
lsof 命令的选项。
-c 用于按进程名称列出打开的文件。
-u 用于列出用户打开的文件。
-i 用于列出在端口上执行的进程。
+D 用于列出目录下打开的文件。
-p 用于列出进程打开的文件。
使用 top 命令列出和管理进程
使用top命令,您可以显示正在运行的系统进程的实时视图。它根据 CPU 使用情况显示进程。您可以根据自己的需要对列进行排序。 top 命令还提供有关系统的一些信息,例如系统运行了多长时间或有多少用户连接到系统以及正在运行的进程数、使用了多少 CPU 和 RAM,以及每个进程的列表过程。
键入命令 top 列出正在运行的进程。
Tasks: 291 total, 1 running, 290 sleeping, 0 stopped, 0 zombie
%Cpu(s) : 2.3us, 0.3sy, 0.0ni, 97.0id, 0.3wa, 0.0hi, 0.0si, 0.0st
MiB Mem: 7880.6 total, 1259.9 free, 3176 used, 3444.4 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4091.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3241 jim 20 0 20.7g 33512 10082 S 1.7 4.2 0:54.24 chrome
3327 jim 20 0 4698084 249156 86456 S 1.3 3.1 1:42.64 chrome
2920 jim 20 0 955400 410868 14372 S 1.0 5.1 7:51.04 chrome
3423 jim 20 0 4721584 198500 10106 S 1.0 2.5 0:49.00 chrome
3030 jim 20 0 458740 114044 66248 S 0.7 1.4 3:00.47 chrome
3937 jim 20 0 4610540 104908 72292 S 0.7 1.3 0:05.91 chrome
1603 jim 20 0 825608 67532 40416 S 0.3 0.8 3:13.52 Xorg
1756 jim 20 0 4154828 257056 10060 S 0.3 3.2 5:53.31 gnome-s+
1898 jim 20 0 289096 29284 5668 S 0.3 0.4 1:06.28 fusuma
3027 jim 20 0 587580 14304 75960 S 0.3 1.8 9:43.59 chrome
3388 jim 20 0 4674192 156208 85032 S 0.3 1.9 0:13.91 chrome
3409 jim 20 0 4642180 140020 87304 S 0.3 1.7 0:15.36 chrome
3441 jim 20 0 16.5g 156396 89700 S 0.3 1.9 0:25.70 chrome
….snip….
您还可以使用 top 命令执行一些操作来更改正在运行的进程;这是下面的列表。
u 通过按“u”,您可以显示某个用户正在运行的进程。
M 通过按“M”,您可以按 RAM 使用情况而不是 CPU 使用情况进行排列。
P 通过按“P”,您可以按 CPU 使用率排序。
1 如果有多个CPU,则按“1”在CPU使用之间切换。
R 通过按“R”,您可以使输出排序相反。
h 通过按“h”您可以转到帮助并按任意键返回。
请注意哪个进程消耗更多内存或 CPU。可以终止那些消耗更多内存的进程,并且可以调整那些消耗更多CPU 的进程,以降低它们对处理器的重要性。
终止顶部的进程:按k并写入您要终止的进程ID。然后输入15或9即可正常或立即杀死;您还可以使用kill 或killall 命令终止进程。
在顶部重新分配进程:按r并写入要重新分配的进程的 PID。它会要求您输入该进程的 PID,然后输入您想要赋予该进程的 nicing 值,范围在 -19 到 20 之间(-19 表示最高重要性,20 表示最低重要性)。
使用系统监视器列出和管理进程
Linux 有一个系统监视器 gnome,可以更动态地显示正在运行的进程。要启动系统监视器,请按windows键并键入系统监视器,单击其图标,您可以在列中看到进程。通过右键单击它们,您可以终止、停止或重新启动该进程。
正在运行的进程和用户帐户按字母顺序显示。您可以按任何字段标题(如 CPU、内存等)对进程进行排序,只需单击它们,它们就会被排序;例如,单击“CPU”可查看哪个进程消耗的 CPU 功率最多。要管理进程,请右键单击它们并选择要对该进程执行的选项。要管理该流程,请选择以下选项。
属性-显示与进程相关的其他设置。
内存映射-显示系统内存映射,以显示该进程正在内存中使用哪些库和其他组件。
打开文件-显示进程打开了哪些文件。
更改优先级-显示一个侧边栏,您可以在其中使用从非常高到非常低以及自定义的选项来重新调整流程。
停止 - 暂停该过程,直到您选择继续。
继续-重新启动暂停的进程。
终止-强制立即终止进程。
使用kill 和killall 终止进程
Kill,killall 命令用于终止/结束正在运行的进程。这些命令还可以用于向正在运行的进程发送有效信号,例如告诉进程继续、结束或重新读取配置文件等。信号可以通过数字或名称两种方式写入。以下是一些常用的信号。
信号编号说明
SIGINT 2 Interpreted from keyboard.
SIGQUIT 3 Quit from the keyboard.
SIGILL 4 Illegal instructions.
SIGTRAP 5 Is used for tracing a trape.
SIGABRT 6 is used for aborting signal from abort(3).
SIGKILL 9 Is used for sending a kill signal.
SIGTERM 15 Is used for sending a termination signal.
SIGCONT 19,18,25 Is used to continue a process if stopped.
SIGSTOP 17,19,23 Is used for stopping processes.
SIGCONT 和 SIGSTOP 的值在不同的 Unix/Linux 操作系统中使用不同的值。有关信号的详细信息,请输入 man 7 信号终端。
使用kill 命令通过PID 向进程发送信号。
记下要向其发送终止信号的进程。您可以通过 ps 或 top 命令找到进程 ID (PID)。
7780 jim 20 0 12596 4364 3460 R 33.3 3.2 13:54:12 top
顶级进程消耗了 33.3% 的 CPU。如果你想杀死这个进程以节省CPU使用率,这里有一些方法可以使用kill命令结束这个进程。
ubuntu@ubuntu:~$ kill -15 7780 or $ kill -SIGTERM 7780
ubuntu@ubuntu:~$ kill -9 7780 or $ kill -SIGKILL 7780
使用killall 命令按名称向进程发送信号。
使用killall命令,你不必搜索进程id;您可以通过名称而不是进程 ID 向进程发送终止信号。如果你不小心,它还可以杀死比你想要的更多的进程,例如,“killall chrome”将杀死所有 chrome 进程,包括那些你不想杀死的进程。有时终止同名进程很有用。
与kill 命令一样,您可以在killall 命令中按名称或数字键入信号。使用killall命令终止任何正在运行的进程;您只需输入其名称和要发送的信号。例如,使用killall命令向firefox发送终止信号进程,请编写以下命令。
或者
使用nice和renice更改进程优先级
Linux系统上的每个进程都有一个很好的值,它在-19到20之间。它决定了哪个进程将在系统中获得更多的CPU访问权。 Nice 的值越低,进程对 CPU 进程的访问权就越多。比如 -16 的好值比 18 的好值有更多的 CPU 访问权限。只有具有root权限的用户才能分配nice负值。普通用户只能分配 0 到 19 之间的“nice”值。普通用户只能在其自己的进程上分配更高的nice值。 root 用户可以为任何进程设置任何好的值。
如果您想通过分配好值来让进程更容易获得 CPU 使用率,请键入以下命令。
并强化这个过程
结论
这里是使用 ps、top、lsof、pstree、pkilll、kill、killall、nice、renice 等管理 Linux 系统的指南。有些进程消耗大部分 CPU 使用率和 RAM;了解如何管理它们可以提高您的系统速度和性能,并为您提供更好的环境来更有效地运行您想要的任何进程。