我在main中调用了几个进程,我可以获得该进程的pid。现在我想等到所有这些进程完成后再清除父进程中的共享内存块。此外,如果任何过程没有完成和segfaulted我想杀死该过程。那么如何从我的父进程代码中的进程的pid中检查进程是否完成没有任何错误,或者它给出了运行时错误或任何其他原因的错误,以便我可以杀死该进程。
此外,如果我想查看其他一些不是子进程但其pid已知的进程的状态。
感谢代码(我不是在寻找脚本而是代码)。
答案 0 :(得分:4)
使用WNOHANG
选项查看waitpid(2)
。使用手册页中的宏检查流程的“命运”,尤其是WIFSIGNALED()
。
此外,segfaulted进程已经死了(除非SIGSEGV
由进程专门处理,这通常不是一个好主意。)
答案 1 :(得分:2)
根据您的更新,您似乎还想查看其他进程,这些进程不是您当前进程的子进程。
您可以查看/proc/{pid}/status
以了解流程当前正在做什么,它将会是:
然而,一旦一个进程死亡(完全,除非被僵尸),所以它的进入/ proc。没有办法判断它是否成功退出,发生了分段,捕获了无法处理的信号,或者无法处理可以处理的信号。除非其父母在某处记录该信息。
听起来你正在为自己没有启动的其他进程编写监视程序,而不是跟踪子进程。
答案 2 :(得分:1)
如果某个程序出现段错误,则无需将其删除。它已经死了。
使用wait
和waitpid
来电等待孩子完成并查看状态,了解他们如何退出。有关如何使用这些功能的详细信息,请参阅here。请特别注意WIFSIGNALED
和WTERMSIG
宏。
答案 3 :(得分:0)
waitpid()用于捕获应用程序终止自身的时刻。请注意,如果您启动多个进程,则必须使用WNOHANG循环waitpid(),直到它返回0.
kill(),信号为0,检查进程是否仍在运行。 IIRC僵尸仍然有资格作为进程,因此您必须拥有适当的SIGCHLD处理程序才能工作。