当你的Linux系统服务器运行缓慢时,该怎么办?您可能做的第一件事是检查网络连接。然后需要查明哪些服务/软件已经变得不正常,并正在占用宝贵的系统资源。有很多方法可以做到这一点。例如,您可以输入top命令,该命令将实时列出正在运行的进程。从那里您可以找到一个进程ID并查看进程使用了多少内存。
或者,您也可以使用一些命令按名称查找进程ID (PID)。有两个命令,每个Linux管理员都应该知道的。我想演示这些命令的用法,希望您的Linux管理工作可能更容易一些。我将在Ubuntu服务器18.04上进行演示,但是这些命令在所有Linux平台上都是通用的。
一、pidof命令
pidof命令是我们首先要查看的。它能告诉我们服务的PID。这个命令可以在您的Linux服务器上直接找到,因此不需要安装任何东西。
假设您有一个LAMP服务器,而Apache表现不好。要进行故障排除,您可能需要找到Apache的PID。幸运的是,您有pidof命令,因此您可以输入:
pidof apache2
在Apache的情况下,可能会返回许多PID(如下图)。
pidof命令显示Apache2的pid。
您现在拥有当前运行的Apache服务器的每个进程ID。当然,对于像Apache这样的进程,如果它不正常运行,您可能需要使用sudo systemctl restart apache2这样的命令进行快速重启。但是,如果服务没有对重新启动做出响应,您该怎么办?幸运的是,您有那些PID,所以您可以终止服务(使用kill PID命令,在这里PID是服务被终止的PID)。终止像Apache这样的服务应该作为最后的手段(总是从像systemctl这样的工具开始)。但拥有这些PID可以使您的工作变得更加容易。
二、pgrep命令
pgrep命令的功能与pidof类似,主要区别在于它可以基于名称或其他属性查找进程。例如,pgrep可以查找与一个组关联的pid。在Ubuntu上,大多数Apache内容倾向于附加到www-data组。使用pgrep,很容易找出与该组相关的pid。输入该命令:
pgrep - g www-data
上述命令的输出将列出属于相关组的所有PID(如下图)
与www-data相关的PID
这个命令的输出可能对我们没有任何好处。毕竟,我们如何知道这些PID属于哪一个(在一个组之外)?我们可能不仅需要知道组的PID,还需要知道附加到PID的服务。要获取此信息,我们添加如下的-l选项:
pgrep - l - g www-data
现在我们看到列出的PID和服务(如下图)
您还可以使用pgrep按用户列出进程。如果您输入命令pgrep -U root,您将看到属于root用户的每个PID。如果您使用特定用户(root除外)发出相同的命令,则列表可能会少得多。例如,pgrep -U jack(在我的服务器上)返回PID:
1225
1234
1251
1352
要查找与这些pid关联的服务,请输入以下命令:
pgrep -l -U jack
现在我们看到哪些服务和PID属于用户jack(如下图)。