2012-08-02 42 views
7

我想知道一個進程是否正在運行。我不想使用任何系統(「」)命令。有沒有任何基於C的函數可以讓你知道一個進程是否正在運行?如何找到一個進程在C中運行?

我想提供進程名稱並想知道它是否正在運行。

謝謝,

+0

我認爲你需要更具體的關於你到底想做什麼。你知道有問題的進程的PID或名稱嗎? – 2012-08-02 21:19:15

+0

我知道進程名稱,是的。 – Kitcha 2012-08-02 21:21:51

+0

你可能想看看這個相關的問題:http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function – rayd09 2012-08-02 21:23:27

回答

9

當然,使用kill(2)

#include <sys/types.h> 
#include <signal.h> 

int kill(pid_t pid, int sig); 

如果SIG爲0,則沒有信號發送,但是仍然執行錯誤檢查;這可以用來檢查是否存在進程ID或進程組ID。

所以才呼籲要檢查,看看你得到一個錯誤(ESRCH)進程的進程ID kill(pid, 0)

+0

這是檢查您是否擁有進程ID的好方法,但他只有進程名稱。 – cegfault 2012-08-02 21:24:21

+0

@cegfault:的確如此。儘管名稱並沒有真正告訴你「進程」,因爲可能有許多進程具有相同的名稱。我認爲OP的問題缺乏幾個重要的細節。 – 2012-08-02 21:35:01

+0

沒有「進程名稱」:'execve(argv [0],NULL,NULL);' – wildplasser 2012-08-02 21:38:54

0

您可以掃描所有當前正在運行的進程的/proc文件系統,然後查看該cmdline條目是否與該特定進程需要的內容匹配。

但是,有一個競爭條件。這個過程可能會在您決定運行後死亡。

確定您的流程是否仍在運行的火災方法就是啓動流程。然後,當一個孩子死亡,你會得到SIGCHLD,你可以使用waitpid(-1,..)找出哪個孩子死亡。

2

在Linux上,另一種方法可能包括檢查/proc目錄的內容。編號目錄是進程ID,而包含cmdline文件的子目錄顯示命令的名稱。

例如,如果/proc/1234/cmdline包含值foo,然後處理foo有1234的ID你可以這樣映射名稱的PID,使用C.標準檔案存取功能的詳細信息,請參閱proc(5)

相關問題