檢查運行進程

檢查運行進程

我被要求檢查並關閉我不熟悉的進程。所以當我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 任何例程

相關內容