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