這就是問題所在。另外,我所擁有的僅僅是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. 非阻塞等待子進程退出
- 4. 如何在Linux中顯示進程狀態(阻塞,非阻塞)
- 5. 獲取非阻塞命令行輸出
- 6. linq是否阻塞線程?
- 7. 阻塞的線程是否會導致進程阻塞?爲什麼和如何?
- 8. Selenium擴展:「阻塞」命令
- 9. 批處理命令退出進程
- 10. ESI是否阻塞或不阻塞?
- 11. eachLine()是否足以阻止進程阻塞?
- 12. http.ServerResponse.write()是否阻塞?
- 13. Nacl_IO阻塞線程,直到fopen完成
- 14. 阻塞,直到事件
- 15. 尾部文件直到進程退出
- 16. 異步執行系統命令而不會阻塞UI並強行退出進程
- 17. 嘗試將命令輸出存儲到變量時ssh阻塞
- 18. 線程在阻塞後是否退出每個同步的方法或對象?
- 19. 是否是Task.Delay非阻塞?
- 20. 如何用PHP非阻塞運行linux終端命令?
- 21. [NSInvocation調用]是否阻塞執行直到完成?
- 22. .NET - 阻塞主線程,直到有任何可用線程
- 23. 命令退出到windows
- 24. 是否有可能委託芹菜任務和阻塞,直到所有處理?
- 25. Python - 執行進程 - >阻止,直到它退出&抑制輸出
- 26. 退出阻塞選擇呼叫!
- 27. 阻塞輸出,直到輸入完成使用線程java
- 28. Workflow Foundation StateFinalizationActivity是否阻塞線程?
- 29. GKSession調用是否阻塞主線程?
- 30. 確定線程是否被阻塞
我知道這是不是猶太問了這樣一個問題的問題更清潔,但是......你怎麼知道進程的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