這就是問題所在。另外,我所擁有的僅僅是PID,而我運行命令的shell不一定是最初調用該進程的shell。有任何想法嗎?是否有Linux命令阻塞,直到進程退出?
回答
while ps -p $PID >/dev/null 2>&1; do sleep 1; done
或
while ps -p $PID >/dev/null 2>&1; do :; done
這是我見過的最好的答案。我想知道爲什麼bash的內置版本的等待只在當前shell的子進程中才起作用。 – 2010-11-10 12:39:09
@B約翰遜:因爲它需要一個只在當前shell中有效的作業ID,而不是採用PID。在工作控制的工作方式內部可能還有其他一些原因。 – 2010-11-10 15:32:53
這不是一個很乾淨的方法,但你可以連續發出kill(2)
系統調用指定的pid,將0作爲一個信號。通過將errno
設置爲ESRCH
,第一次kill
不成功,則可以斷定該過程已退出。
比如'0'。 – 2010-11-09 21:55:11
kill -0 $ {PID}是首選方式。由於它只使用一個簡單的系統調用,因此它具有便攜性和快速性。 – Metiu 2010-11-10 17:15:14
您可以檢查dir/proc/PID是否存在。這似乎不是發送多個信號
- 1. libssh2_channel_close將被阻塞,直到遠程命令退出
- 2. 安卓:緩存阻塞,直到進程退出
- 3. 如何在Linux中顯示進程狀態(阻塞,非阻塞)
- 4. 獲取非阻塞命令行輸出
- 5. Selenium擴展:「阻塞」命令
- 6. eachLine()是否足以阻止進程阻塞?
- 7. http.ServerResponse.write()是否阻塞?
- 8. Nacl_IO阻塞線程,直到fopen完成
- 9. 阻塞,直到事件
- 10. 尾部文件直到進程退出
- 11. 異步執行系統命令而不會阻塞UI並強行退出進程
- 12. 嘗試將命令輸出存儲到變量時ssh阻塞
- 13. 線程在阻塞後是否退出每個同步的方法或對象?
- 14. [NSInvocation調用]是否阻塞執行直到完成?
- 15. .NET - 阻塞主線程,直到有任何可用線程
- 16. Python - 執行進程 - >阻止,直到它退出&抑制輸出
- 17. 是否有可能委託芹菜任務和阻塞,直到所有處理?
- 18. 退出阻塞選擇呼叫!
- 19. 阻塞輸出,直到輸入完成使用線程java
- 20. org.gradle.process.internal.ExecException:進程「命令具有非零退出值完成1
- 21. 確定線程是否被阻塞
- 22. Workflow Foundation StateFinalizationActivity是否阻塞線程?
- 23. 檢查pthread線程是否被阻塞
- 24. 單進程阻塞隊列
- 25. 是否有命令只輸出Linux中的部分命令結果?
- 26. 是否有Linux命令來複制/替換「banner」命令?
- 27. 網絡阻塞到非阻塞,只有線程作爲選項?
- 28. 是否可以將命令發送到現有的xterm進程?
- 29. IISNode是否使NodeJS成爲阻塞進程?
- 30. JTextArea在Linux上阻塞線程?
我知道這是不是猶太問了這樣一個問題的問題更清潔,但是......你怎麼知道進程的PID是尚未創建? PID可以是相當隨機的。當然,在實踐中,它們是線性分配的,但您不知道在時間「A」和「B」之間將開始多少個進程,或者PID計數器是否會進行換行。 – 2010-11-10 00:01:21
@TomMD也許他使用'pidof'來在運行時找到進程的PID,或者其他的東西。有一百種不同的方式可以擁有進程的PID,而不是在shell腳本中對其進行硬編碼;) – MartinodF 2010-11-10 00:27:46
@TomMD我知道PID,因爲我知道進程名稱,並且我可以使用ps命令來獲取PID。 – 2010-11-10 11:59:03