2011-03-28 45 views
10

有人可以告訴我如何檢查具有給定進程ID的unix進程是否正在C程序中運行。我知道我可以調用system()並使用ps命令,但我不想調用system()。檢查C中的運行進程

+0

可能重複:http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function – 2011-03-28 14:53:14

+0

不是重複。這個問題是關於檢查*特定的*進程ID,另一個問題是關於列出*所有*進程。 (Juliano的優秀答案不適用於其他問題。) – DevSolar 2011-03-28 15:05:40

+0

@EdwinBuck請考慮取消刪除您的正確的,即使不是完全可移植的答案(在/ proc可用的系統上,它將提供訪問可幫助消除歧義的信息,別人'ps'必須從某處獲得它的信息) – 2013-06-21 12:36:15

回答

30

使用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 */ 
} 
+2

簡單。優雅。無遺。 +1。 – DevSolar 2011-03-28 15:06:19

+0

謝謝Juliano。感謝您的快速和優秀的回覆。 – 2011-03-28 15:10:56

+3

除非進程是調用進程的子進程,否則也是無用的。只要完成的進程由其父進程「等待」,PID就可以重新使用,因此如果一個給定PID的進程存在,那麼就不能保證它是你認爲它的進程,除非你是父進程那麼你已經知道它的pid是否由'wait'-family函數返回)。 – 2011-03-28 15:35:01