介绍
我们通常有很多进程在我们的机器上运行。其中一些运行了很长时间,而另一些则只运行了不久。有时,我们需要监视和控制它们。Linux系统中有许多可用于管理它们的命令。
在本教程中,我们将看到检查进程是否正在运行的不同方法。
准备
首先,我们创建一个需要很长时间才能完成的脚本:
chmod +x run.sh
cat run.sh
#!/bin/bash
echo 'Starting...'
sleep 1000
echo 'Completed'
然后,我们将在后台启动它:
./run.sh &
接下来,让我们使用不同的命令检查脚本的状态。
ps
命令
ps
命令是Linux监控进程状态最常用的命令之一。
它带有各种选项来列出进程及其参数。因此,此命令为我们提供了有关进程的详细信息:
ps -ef | grep run.sh
可以看到
song 114941 114688 0 21:53 pts/0 00:00:00 /bin/bash ./run.sh
song 115009 114688 0 21:54 pts/0 00:00:00 grep --color=auto run.sh
首先,我们运行了ps
命令并将结果通过管道传送到grep
命令。其次,在grep
命令中,我们搜索了脚本名称。
让我们看看我们用于ps
命令的不同选项:
- -e:选择系统中运行的所有进程
- -f:查看过程的完整格式列表
最后,我们可以在结果中看到脚本名称,这证实了脚本确实在运行。通常,ps
命令会显示PID(114941)和父进程PID(114688)。
我们可以在结果中看到另外一个进程。这是管道中的grep
命令。这个结果并不证明进程正在运行,因为这将始终显示在结果中。
pgrep
命令
有时,我们只需要检查一个进程是否处于活动状态。我们可能对有关该过程的微小细节不感兴趣。对于这些情况,我们可以使用pgrep
命令。
这是pgrep
的语法:
pgrep [options] pattern
pgrep
命令在当前运行的进程中搜索模式。而且,一旦它找到一个进程,它就会根据我们在运行命令时提供的选项打印PID和进程名称。
让我们看看如何使用pgrep
:
pgrep -l run.sh
结果
116777 run.sh
在这里,我们可以看到它列出了正在运行的PID及其名称。我们使用了-l
选项来列出进程的名称。
我们也可以使用其他选项:
- -c:获取进程数
- -f:在完整的命令中搜索,包括参数列表
- -a:打印命令行和PID
- -i:搜索时忽略大小写
- -x:列出与模式完全匹配的进程
- -d:如果我们有多个进程,则设置不同的分隔符(默认情况下,换行符用作分隔符)
pidof
命令
**pidof
命令查找并打印进程的PID。**它类似于我们在上面看到的pgrep
命令。
让我们看看pidof
的语法:
pidof [-s] [-c] [-q] [-w] [-x] [-o omitpid[,omitpid...]...] [-S separator] program [program...]
现在,让我们运行它:
pidof -x run.sh
显示结果
116777
我们已经使用-x
选项运行了pidof
命令,以在搜索中包含所有正在运行的脚本。它列出了我们启动的脚本的PID。
在此命令中,我们可以提供多个进程名称或脚本名称进行搜索。它在一行中打印PID。因此,我们可以将这些生成的PID传送到另一个命令中,以对找到的PID执行其他操作。
proc
文件系统
proc
文件系统是另一个我们可以找到与系统中不同进程相关的信息的地方。我们可以在大多数Linux发行版中找到它,因此,这种查找与流程相关的信息的方法适用于大多数情况。
proc
文件系统存储内核信息,它存储组织在不同文件和文件夹中的实时系统数据。我们可以查看这些文件以获取特定信息。
除其他文件外,此文件系统还有一个以每个进程的PID命名的目录。在该目录中,我们可以找到许多包含与该进程相关的元数据的文件。其中,我们可以找到一个包含可读格式的基本进程信息的状态文件。
在所有这些PID子目录中对这个文件进行grep
:
grep "run.sh" /proc/[0-9]*/status | awk -F: '{split($1,a,/\//); print a[3] $3}'
116777 run.sh
在这里,我们使用grep
命令在PID子目录中搜索进程名称。然后,包含文件路径和进程名称的结果通过管道传送到awk
命令。从文件路径中,我们使用split
函数提取PID。最后,我们打印PID和进程名称。
结论
在本文中,我们看到了检查进程是否正在运行的不同方法。
我们已经看到pgrep
和pidof
命令显示有关进程的最少信息。
另一方面,ps
命令显示更多信息。此外,如果我们需要更深入的了解,我们可以使用proc
文件系统。