列出Linux中正在运行的进程的5个示例
如何在Linux中按用户和名称列出进程?
如何检查进程是否由pid运行?
如何检查过程状态?
使用哪个命令来杀死进程?
在本教程中,我们将涵盖所有这些问题,并探索不同的命令和工具以列出和管理Linux和Unix中的进程。
ps命令是列出服务器中所有正在运行的进程的最佳工具。
ps可使用多种参数来根据我们的要求列出进程。
列出所有正在运行的进程
方法1:使用" px aux"
要使用BSD语法列出系统上的每个进程,请执行以下操作:
# ps aux
其中
ax Lift the BSD-style "only yourself" restriction, which is imposed upon the set of all processes when some BSD-style (without "-") options are used or when the ps personality setting is BSD-like. u Display user-oriented format.
这将为我们提供一长串输出,其中包含有关各个进程的更多详细信息,例如内存和cpu的使用情况,状态,进程的用户所有者等。
方法2:使用" ps -ef"
下一个方法将使用标准语法列出所有正在运行的进程:
# ps -ef
其中
-e Select all processes -f Do full-format listing.
与ps aux
相比,这提供的信息更少:
方法3:使用" ps -ely"
我们可以在ps
中使用更多参数来列出Linux中正在运行的进程:
# ps -ely
其中
-e Select all processes. -l Long format -y Do not show flags; show rss in place of addr
与ps -ef
相比,该命令将为我们提供更多详细信息,例如优先级和各个进程的实用价值。
按用户列出进程
要列出基于用户所有者的所有进程,我们可以使用以下语法:
ps -U USER -u USER u
其中
-U userlist Select by real user ID (RUID) or name. It selects the processes whose real user name or ID is in the userlist list. The real user ID identifies the user who created the process, -u userlist Select by effective user ID (EUID) or name. This selects the processes whose effective user name or ID is in userlist. u Display user-oriented format.
列出由root用户启动的进程:
~]# ps -U root -u root u
列出普通用户hynman
启动的进程:
~]# ps -U hynman -u hynman u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND hynman 5575 0.0 0.0 280884 8508 ? S Oct20 0:05 python /opt/hynman/jboss/bin/dualprim_watch.py -a 20 -m 500 -U nds -L 500 -t 10 hynman 8995 0.0 0.0 113420 1628 ? S Oct20 0:00 /bin/sh /opt/hynman/jboss/bin/standalone.sh -b 0.0.0.0 -c standalone-full-adm.xml hynman 9208 2.9 3.6 23510668 4848336 ? Sl Oct20 50:04 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre/bin/java -D[Standal
列出进程树
方法1:使用" ps axjf"或者" ps -ef --forest"
我们还可以使用" ps"命令以树格式列出正在运行的进程,以了解父进程和子进程。
~]# ps axjf
或者
~]# ps -ef --forest
方法2:使用pstree
虽然如果我们希望使用pstree来查看所有正在运行的进程的结构,则可以用上述命令更好地替代,这是RHEL/CentOS发行版中psmisc rpm的一部分。
此命令用于以分层格式显示父子关系。
~]# pstree -p
其中
-p Show PIDs. PIDs are shown as decimal numbers in parentheses after each process name
要列出由单个用户启动的流程的流程树,我们可以使用
~]# pstree -p USERNAME
例如,显示用户hynman
的进程树:
~]# pstree -p hynman
我们可以检查pstree的手册页以获取更多受支持选项的列表。
列出单个进程的线程数
我们可以使用-L参数列出线程数以及各个进程。
它将在输出中添加一个新列,可能带有LWP
和NLWP
。
~]# ps -eLf
用用户定义的格式列出流程
默认情况下," ps"将显示某些默认的列列表。
我们可以使用以下语法来操纵和打印自己的列集,以获取所需的过程详细信息:
ps -eo ARUMENTS
其中我们可以使用ps手册页中受支持的值列表替换ARGUMENTS
示例1:仅显示PID和命令
只显示PID及其各自命令的列表:
~]# ps -eo pid,comm PID COMMAND 1 systemd 2 kthreadd 3 rcu_gp 4 rcu_par_gp 6 kworker/0:0H-kblockd ...
示例2:显示每个进程的内存和cpu详细信息
我们可以使用不同的参数来打印单个进程的内存和与cpu相关的信息,这里我合并了一些:
~]# ps -eo pid,%mem,%cpu,rss,rsz,vsz,comm PID %MEM %CPU RSS RSZ VSZ COMMAND .... 902 0.2 0.0 14420 14420 424800 sssd 904 0.1 0.0 5220 5220 82744 avahi-daemon 905 0.4 0.0 22152 22152 1626068 polkitd 912 0.2 0.0 14640 14640 462728 ModemManager 914 0.0 0.0 2012 2012 18872 lsmd 916 0.0 0.0 2136 2136 17408 mcelog ....
获取进程的进程ID
现在假设我们有一个要获取其PID的正在运行的进程,因此我们可以再次使用以下格式的ps
:
ps -C PROCESS -o pid=
其中我们需要用要对其执行PID查找的过程或者命令的名称替换" PROCESS"。
例如,要获取rsyslogd
进程的PID:
~]# ps -C rsyslogd -o pid= 1540
类似地,获取sshd
守护进程的PID列表
~]# ps -C sshd -o pid= 999 1705 1899 2009 2011 2319 2321 2342 2344 13874 13879
使用PID获取进程名称
现在,如果情况相反,即我们具有PID,并且希望获取映射PID的过程或者命令,则可以使用以下格式:
ps -q PID -o comm=
其中将PID替换为我们必须对其执行查找的进程的pid值。
以下是一些使用PID值获取进程名称的示例。
~]# ps -q 2009 -o comm= sshd ~]# ps -q 1 -o comm= systemd
列出已停止的进程
我们可以使用ctrl + z快捷键停止正在运行或者已挂起的进程。
当我们按下此组合键时,终端上正在进行的过程将被强制停止。
例如,其中我有一个SFTP会话,该会话被卡住了,所以我按了ctrl + z强制停止了该进程,该进程立即停止了该进程并返回控制台。
~]# sftp -o Port=2222 [email protected] [email protected]'s password: Connected to [email protected]. sftp> exit Interrupt ^Z [3]+ Stopped sftp -o Port=2222 [email protected]
要列出所有处于停止状态的进程,请使用" jobs"命令
~]# jobs [1] Stopped sftp -o Port=2222 [email protected] [2]- Stopped sftp -o Port=2222 [email protected] [3]+ Stopped sftp -o Port=2222 [email protected]
因此,当前在我的服务器中,我有3个已停止的进程。
为了杀死一个停止的进程,我们使用
kill %[JOB ID]
其中,"作业ID"是我们在方括号下看到"已停止"的ID号。
因此,例如,要终止作业ID为3的进程,我们将使用:
~]# kill %3 [3]+ Stopped sftp -o Port=2222 [email protected]
接下来,如果我检查当前已停止的进程,那么我会看到作业ID为3的进程被标记为Exit(退出),这意味着该进程即将被杀死(几乎死亡)。
~]# jobs [1] Stopped sftp -o Port=2222 [email protected] [2]- Stopped sftp -o Port=2222 [email protected] [3]+ Exit 1 sftp -o Port=2222 [email protected]
几秒钟后,我们再次检查了状态,列表中不再显示具有作业ID 3的进程,并且该进程已成功终止
]# jobs [1]- Stopped sftp -o Port=2222 [email protected] [2]+ Stopped sftp -o Port=2222 [email protected]