有人可以告訴我如何檢查具有給定進程ID的unix進程是否正在C程序中運行。我知道我可以調用system()並使用ps命令,但我不想調用system()。檢查C中的運行進程
回答
使用kill(2):
if (kill(pid, 0) == 0) {
/* process is running or a zombie */
} else if (errno == ESRCH) {
/* no such process with the given pid is running */
} else {
/* some other error... use perror("...") or strerror(errno) to report */
}
簡單。優雅。無遺。 +1。 – DevSolar 2011-03-28 15:06:19
謝謝Juliano。感謝您的快速和優秀的回覆。 – 2011-03-28 15:10:56
除非進程是調用進程的子進程,否則也是無用的。只要完成的進程由其父進程「等待」,PID就可以重新使用,因此如果一個給定PID的進程存在,那麼就不能保證它是你認爲它的進程,除非你是父進程那麼你已經知道它的pid是否由'wait'-family函數返回)。 – 2011-03-28 15:35:01
- 1. 檢查正在運行的進程 - java
- 2. 如何檢查進程是否仍在c內核中運行?
- 3. 運行子進程時檢查條件
- 4. 檢查進程是否正在運行
- 5. 檢查進程是否正在運行
- 6. bash腳本來檢查運行進程
- 7. 檢查某個特定進程是否在運行C++的windows上運行
- 8. 如何檢查進程是否從C++代碼運行?
- 9. C#:檢查進程是否正在運行問題
- 10. 如何使用C++檢查進程是否在運行
- 11. C++如何檢查Outlook進程是否已在運行
- 12. C++檢查特定進程是否正在運行
- 13. 檢查C#中的運行安裝#
- 14. 檢查進程是否正在運行(使用進程名稱)
- 15. 編程檢查某個進程在後臺中運行
- 16. 如何檢查NSIS中特定端口上運行的進程
- 17. 檢查Windows服務器中運行的PHP進程
- 18. 運行在.NET和C++中的進程
- 19. 如何檢查進程在python中運行(在linux中)?
- 20. 檢查遠程進程在運行(Linux)的
- 21. 進程仍在運行C++
- 22. 從Mono上運行的C#進程運行C++應用程序。運行檢測器錯誤
- 23. 檢查進程是否在HP NonStop OSS Tandem中運行
- 24. 如何檢查Linux中是否正在運行進程?
- 25. 檢查兩個進程是否未在shell腳本中運行
- 26. 檢查一個進程是否在Unix中運行
- 27. 如何檢查Unix進程是否在Perl中運行?
- 28. 在Windows7中運行管理進程(C#)
- 29. 在C中運行/暫停子進程?
- 30. 如何檢查正在運行的java程序的進度
可能重複:http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function – 2011-03-28 14:53:14
不是重複。這個問題是關於檢查*特定的*進程ID,另一個問題是關於列出*所有*進程。 (Juliano的優秀答案不適用於其他問題。) – DevSolar 2011-03-28 15:05:40
@EdwinBuck請考慮取消刪除您的正確的,即使不是完全可移植的答案(在/ proc可用的系統上,它將提供訪問可幫助消除歧義的信息,別人'ps'必須從某處獲得它的信息) – 2013-06-21 12:36:15