有沒有一種方法可以查詢Linux進程表中的進程狀態,以便能夠證明進程在查詢時是運行還是阻塞執行?我的目標是從流程或程序的「外部」執行此操作,因爲我希望通過操作系統流程瞭解這一點,但任何想法都是值得歡迎的!如何在Linux中顯示進程狀態(阻塞,非阻塞)
這裏是Python代碼阻塞的進程:
import subprocess
proc = subprocess.call('ls -lRa /', shell=True)
這裏爲未封端的過程中的Python代碼:
import subprocess
proc = subprocess.Popen('ls -lRa /', shell=True)
這裏是 'PS -ef' 的輸出表示進程ID:
UID PID PPID C STIME TTY TIME CMD
user1 14308 4145 0 15:30 pts/2 00:00:00 python call_b.py
user1 14309 14308 0 15:30 pts/2 00:00:00 /bin/sh -c ls -lRa/
user1 14310 14309 15 15:30 pts/2 00:00:30 ls -lRa/
root 14313 2 0 15:31 ? 00:00:00 [kworker/2:0]
user1 14318 2476 0 15:32 pts/4 00:00:00 -bash
user1 14442 1 0 15:33 pts/4 00:00:00 /bin/sh -c ls -lRa/
user1 14443 14442 6 15:33 pts/4 00:00:01 ls -lRa/
雖然這些'ls'命令正在處理,我想顯示哪些進程阻止和whi ch狀態其他人都在。這個問題是打算成爲一個工具前進,學習狀態,因爲我學習python多處理,所以雖然我相信PID 14309阻塞和PID 14442是非阻塞的,雖然我可能有這個錯誤。這就是爲什麼我能夠看到或測試所顯示的所有PID對此有幫助。
感謝尊敬的用戶'ubuntu'和他們對此的迴應: Blocking and Non Blocking subprocess calls 提供了入門者代碼。
在這種情況下的操作系統是Ubuntu,但任何debian或操作系統評論將有所幫助。
優秀,這顯示了我正在尋找的東西。我在下面添加了另一部分內容,因爲我相信它有助於理解。 – apollon 2015-01-10 13:14:46