我被要求检查并关闭我不熟悉的进程。所以当我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 脚本只是执行其中的命令。这意味着,您不会在top
or的输出中获得 shell 脚本名称htop
,它只会打印 shell 脚本中每个例程的 /proc/$PID/cmdline 。
除了使用echo $!
after 命令来获取你想要的 PID 之外。我想pgrep
在需要时使用命令(或者 pkill 如果你想杀死它)。
pgrep、pkill - 根据名称和其他属性查找进程或向进程发出信号
pgrep 只需通过 /proc/*/cmdline grep 您的参数并输出匹配的 PID pkill 与kill 兼容,因此您可以使用 cmdline 轻松 pkill 任何例程