【Linux】检查进程是否在Linux中运行

117 阅读4分钟

介绍

我们通常有很多进程在我们的机器上运行。其中一些运行了很长时间,而另一些则只运行了不久。有时,我们需要监视和控制它们。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和进程名称。

结论

在本文中,我们看到了检查进程是否正在运行的不同方法。

我们已经看到pgreppidof命令显示有关进程的最少信息。

另一方面,ps命令显示更多信息。此外,如果我们需要更深入的了解,我们可以使用proc文件系统。

iconmonstr-github-1.svg