2011-03-28 47 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