![檢查運行進程](https://rvso.com/image/23957/%E6%AA%A2%E6%9F%A5%E9%81%8B%E8%A1%8C%E9%80%B2%E7%A8%8B.png)
我被要求檢查並關閉我不熟悉的進程。所以當我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 任何例程