检查运行进程

检查运行进程

我被要求检查并关闭我不熟悉的进程。所以当我ls在 bin 文件夹下时,我看到多个进程.sh。但我想知道哪个进程与哪个tomcat进程关联。

有什么简单的方法可以查到吗?

例子 startmyprocess1.sh,但是当我这样做时ps -ef | grep startmyprocess1不会返回正在运行的进程。

但实际上正在运行的tomcat进程名称是myprocess,所以当我这样做时ps -ef | grep myprocess,我可以看到正在运行的进程。要知道这还得去问相关负责人。

所以,名称不同。如果是这样的话,我得问他几次。有更好的方法来解决这个问题吗?

答案1

试试这个..,(未经测试)

ps -aux | grep "yourprocess"

例如,

ps -aux | grep "httpd"

答案2

从 startmyprocess.sh 中启动 myprocess 确实不是以底层 shell 脚本命名该进程,这就是您ps -ef | grep startmyprocess1不返回结果的原因。

这也是为什么许多进程,尤其是守护进程,将它们的 pid 写入文件,以便您可以轻松引用它的进程。这可以通过以下方式完成:

#!/bin/sh
pid=`myprocess`
echo $pid > /tmp/myprocess.pid

或者你可以查询$!包含最后一个pid的:

#!/bin/sh
myprocess
echo $! > /tmp/myprocess.pid

并通过 pid 查询/列出进程:

ps --pid $PID

答案3

我认为像“top”这样的软件会做得很好。

类型:

top

或者

htop

答案4

@invert 的回答已经解释了很多,shell 脚本只是执行其中的命令。这意味着,您不会在topor的输出中获得 shell 脚本名称htop,它只会打印 shell 脚本中每个例程的 /proc/$PID/cmdline 。

除了使用echo $!after 命令来获取你想要的 PID 之外。我想pgrep在需要时使用命令(或者 pkill 如果你想杀死它)。

pgrep、pkill - 根据名称和其他属性查找进程或向进程发出信号

pgrep 只需通过 /proc/*/cmdline grep 您的参数并输出匹配的 PID pkill 与kill 兼容,因此您可以使用 cmdline 轻松 pkill 任何例程

相关内容