众所周知,pidof和pgrep是每个Linux使用者应该知道的两个命令。虽然您可能永远不需要它们 - 但如果您这样做,您会很高兴它们在您的工具箱中。
当Linux服务器运行变得缓慢时,您会怎么做? 您可能要做的第一件事就是检查网络连接。 在那之后,您可能需要找出是哪些流氓服务/软件正在吞噬宝贵的系统资源。 有很多方法可以做到这一点。
例如,您可以发出top命令,该命令将实时列出正在运行的进程。 从那里,您可以找到进程ID,并查看该进程正在使用的内存使用量。
或者您可以使用另外一种方法,使用几个命令按名称查找进程ID(PID)。 特别是有两个命令,每个Linux用户都应该知道。 我想演示这些命令的用法,所以希望你的Linux管理工作可能会更容易一些。 我将在Ubuntu Server 18.04上进行演示,但这些命令在所有Linux平台上都可用(并以相同的方式使用)。
pidof
pidof命令是我们第一个看到的命令。 正如您所料,它会告诉我们进程的PID。 此命令已内置在Linux服务器上,因此无需安装任何内容。 假设你的服务器有一台LAMP服务器而Apache表现不佳(至少你认为是这样)。 要进行故障排除,您可能需要找到Apache的PID。 幸运的是,你有pidof命令,所以你可以输入:
pidof apache2
在Apache的情况下,你可能会返回一些PID(下图)。
您现在拥有当前运行的Apache服务器的每个进程ID。 当然,对于像Apache这样的进程,在它出现故障的情况下,您可能希望使用 sudo systemctl restart apache2 之类的命令快速重启。 但是如果服务没有响应重启,你会怎么做? 依旧幸运的是,你有这些PID,所以你总是可以终止服务(使用kill PID命令,其中PID是要被杀死的服务的PID)。 杀死像Apache这样的服务应该只作为最后的手段(总是从像systemctl这样的工具开始)。
但拥有这些PID可以使您的工作变得更加容易
参阅:Linux发行版比较图表
http://www.techproresearch.com/downloads/linux-distribution-comparison-chart/
(Tech Pro Research)
pgrep
pgrep命令的功能与pidof类似,主要区别在于它可以根据名称或其他属性查找进程。 例如,pgrep可以查找与组关联的PID。 在Ubuntu上,大多数Apache内容往往附加到www-data组。 使用pgrep,可以很容易地找出与该组相关的PID。 使用命令:
pgrep -G www-data
上述命令的输出将列出属于相关组的所有PID(下图)。

该命令的输出可能对我们没有好处。 毕竟,我们不知道这些PID属于哪一个(在一个组之外)?
我们可能不仅需要知道组的PID,还需要知道附加到PID的服务。 要获取此信息,我们添加如下的 -l 选项:
pgrep -l -G www-data
现在我们看到列出的PID和服务了。(如下图)

参阅:如何使用grep:10示例在Linux中查找文件
https://www.techrepublic.com/resource-library/whitepapers/how-to-find-files-in-linux-with-grep-10-examples2/(FREE TechRepublic PDF)
您还可以使用pgrep按用户列出进程。 如果您发出命令pgrep -U root,您将看到属于root用户的每个PID(这是一个重要的数字)。 如果您使用特定用户(root除外)发出相同的命令,则列表可能会短得多。 例如,pgrep -U jack(在我的服务器上)返回的PID:
1140
1150
2810
1531
要找出与这些PID关联的服务,输入以下命令:
pgrep -l -U jack
现在我们看到哪些服务和PID属于用户jack(如下图)。

请继续学习更多有关于pidof和pgrep,要比我在这里概述的更多哦。 了解更多信息的最佳方法是发出命令 man pidof 和 man pgrep 来读取每个命令的手册页。 这两个命令应该很容易适合您的Linux,并有助于保持服务器的运行。
Q.E.D.
当Linux服务器运行变得缓慢时,您会怎么做? 您可能要做的第一件事就是检查网络连接。 在那之后,您可能需要找出是哪些流氓服务/软件正在吞噬宝贵的系统资源。 有很多方法可以做到这一点。
例如,您可以发出top命令,该命令将实时列出正在运行的进程。 从那里,您可以找到进程ID,并查看该进程正在使用的内存使用量。
或者您可以使用另外一种方法,使用几个命令按名称查找进程ID(PID)。 特别是有两个命令,每个Linux用户都应该知道。 我想演示这些命令的用法,所以希望你的Linux管理工作可能会更容易一些。 我将在Ubuntu Server 18.04上进行演示,但这些命令在所有Linux平台上都可用(并以相同的方式使用)。
pidof
pidof命令是我们第一个看到的命令。 正如您所料,它会告诉我们进程的PID。 此命令已内置在Linux服务器上,因此无需安装任何内容。 假设你的服务器有一台LAMP服务器而Apache表现不佳(至少你认为是这样)。 要进行故障排除,您可能需要找到Apache的PID。 幸运的是,你有pidof命令,所以你可以输入:
pidof apache2
在Apache的情况下,你可能会返回一些PID(下图)。

您现在拥有当前运行的Apache服务器的每个进程ID。 当然,对于像Apache这样的进程,在它出现故障的情况下,您可能希望使用 sudo systemctl restart apache2 之类的命令快速重启。 但是如果服务没有响应重启,你会怎么做? 依旧幸运的是,你有这些PID,所以你总是可以终止服务(使用kill PID命令,其中PID是要被杀死的服务的PID)。 杀死像Apache这样的服务应该只作为最后的手段(总是从像systemctl这样的工具开始)。
但拥有这些PID可以使您的工作变得更加容易
参阅:Linux发行版比较图表
http://www.techproresearch.com/downloads/linux-distribution-comparison-chart/
(Tech Pro Research)
pgrep
pgrep命令的功能与pidof类似,主要区别在于它可以根据名称或其他属性查找进程。 例如,pgrep可以查找与组关联的PID。 在Ubuntu上,大多数Apache内容往往附加到www-data组。 使用pgrep,可以很容易地找出与该组相关的PID。 使用命令:
pgrep -G www-data
上述命令的输出将列出属于相关组的所有PID(下图)。

该命令的输出可能对我们没有好处。 毕竟,我们不知道这些PID属于哪一个(在一个组之外)?
我们可能不仅需要知道组的PID,还需要知道附加到PID的服务。 要获取此信息,我们添加如下的 -l 选项:
pgrep -l -G www-data
现在我们看到列出的PID和服务了。(如下图)

参阅:如何使用grep:10示例在Linux中查找文件
https://www.techrepublic.com/resource-library/whitepapers/how-to-find-files-in-linux-with-grep-10-examples2/(FREE TechRepublic PDF)
您还可以使用pgrep按用户列出进程。 如果您发出命令pgrep -U root,您将看到属于root用户的每个PID(这是一个重要的数字)。 如果您使用特定用户(root除外)发出相同的命令,则列表可能会短得多。 例如,pgrep -U jack(在我的服务器上)返回的PID:
1140
1150
2810
1531
要找出与这些PID关联的服务,输入以下命令:
pgrep -l -U jack
现在我们看到哪些服务和PID属于用户jack(如下图)。

请继续学习更多有关于pidof和pgrep,要比我在这里概述的更多哦。 了解更多信息的最佳方法是发出命令 man pidof 和 man pgrep 来读取每个命令的手册页。 这两个命令应该很容易适合您的Linux,并有助于保持服务器的运行。
Q.E.D.
