指令 ps 是處理程序狀態(process status) 的簡寫,經常會搭配 aux 參數:
用途是查看 (a)系統所有 (x)包含未從終端機執行 (u)顯示附加資訊 的處理程序資訊。
假設要查詢 script.sh 這個腳本是否正在執行中:
這裡可以發現有兩個和 script.sh 有關的處理程序,不過其實第二個是我們使用 grep 來過濾「 ps 指令查詢 script.sh 處理程序的輸出結果」的處理程序,為了要避免顯示 grep 的處理程序,可以使用下面的方式過濾掉:
太麻煩了吧...
(a)顯示 PID 和完整指令 (f)在完整的處理程序名稱中尋找
以上面的例子處理程序 Id 就是 860269 :
註: grep 的意思是 global regular expression
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 168264 11484 ? Ss 2023 429:24 /lib/systemd/systemd --system --deserialize 67
root 2 0.0 0.0 0 0 ? S 2023 0:15 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 2023 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 2023 0:00 [rcu_par_gp]
dev 1686981 0.0 0.1 182784 38248 ? S Feb05 0:03 php-fpm: pool www
systemd+ 3945823 0.0 0.0 8092 712 ? S 2023 0:00 nginx: worker process
www-data 4061395 0.0 0.0 88400 19452 ? S Feb15 0:02 apache2 -DFOREGROUND
用途是查看 (a)系統所有 (x)包含未從終端機執行 (u)顯示附加資訊 的處理程序資訊。
查詢指定處理程序
想要確認某個處理程序有沒有在執行:
ps aux | grep 處理程序
假設要查詢 script.sh 這個腳本是否正在執行中:
ps aux | grep script.sh
dev 860269 0.0 0.0 2892 956 tty1 S+ Feb19 0:00 sh script.sh
dev 2593491 0.0 0.0 6612 2244 pts/0 S+ 22:55 0:00 grep --color=auto script.sh
這裡可以發現有兩個和 script.sh 有關的處理程序,不過其實第二個是我們使用 grep 來過濾「 ps 指令查詢 script.sh 處理程序的輸出結果」的處理程序,為了要避免顯示 grep 的處理程序,可以使用下面的方式過濾掉:
ps aux | grep -v grep | grep 處理程序
太麻煩了吧...
pgrep
不過在 Linux 中有一個更簡單的指令 pgrep (process grep),就是專門用來過濾執行中的處理程序:
pgrep -af script.sh
860269 sh script.sh
(a)顯示 PID 和完整指令 (f)在完整的處理程序名稱中尋找
停止處理程序
現在我們找到處理程序了,假設要停止這個處理程序,可以使用 kill 指令:
kill 處理程序Id
以上面的例子處理程序 Id 就是 860269 :
kill 860269
註: grep 的意思是 global regular expression
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com