Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过C中的信号检查进程的状态_C_Process_Signals_Pid - Fatal编程技术网

通过C中的信号检查进程的状态

通过C中的信号检查进程的状态,c,process,signals,pid,C,Process,Signals,Pid,我试图检查任意进程是否正在运行(状态S)。如果它停止(状态T),那么我应该唤醒它并等待它终止。到目前为止,我能够做到这一点 我的问题是,当我等待它完成时,我打开了一个新的终端,并使用kill-stop停止该过程,但等待仍在继续 我相信: while((check = kill(PID,0)) == 0); 然而,事实证明,这只是检查流程是否存在。有没有办法等待这样的任意进程?但是,只等待运行状态。你想要这个做什么呢?waitid()可能会有兴趣,顺便说一句。@shawn我正在使用Ubuntu,

我试图检查任意进程是否正在运行(状态S)。如果它停止(状态T),那么我应该唤醒它并等待它终止。到目前为止,我能够做到这一点

我的问题是,当我等待它完成时,我打开了一个新的终端,并使用
kill-stop
停止该过程,但等待仍在继续

我相信:

while((check = kill(PID,0)) == 0);

然而,事实证明,这只是检查流程是否存在。有没有办法等待这样的任意进程?但是,只等待运行状态。

你想要这个做什么呢?
waitid()
可能会有兴趣,顺便说一句。@shawn我正在使用Ubuntu,waitpid()用于子进程,但我不知道我要检查的waitid()。马克,我不想继续这个while循环,你认为这是一个解决方案吗?对不起,我应该说可能想使用
while((check=kill(PID,SIGCONT))==0)而不是可能,因为我不知道您的确切情况。我的建议的理由如下:如果您将有一个循环运行,直到进程停止(在这种情况下,您继续使用SIGCONT并恢复循环)或退出(在这种情况下,您停止循环),那么在循环中发送SIGCONT可能更便宜。在循环中有一个小的延迟,这样就不会不必要地消耗cpu时间。当目标进程退出时,
kill
将得到一个错误。如果您只需要继续该过程一次或几次,那么重复读取和解析/proc/nnn/stat或/proc/nnn/status循环可能会更便宜,直到看到状态T为止。