![](/img/trans.png)
[英]In a c program, does the whole process terminates when the main thread terminate?
[英]How to do something in C when a process terminates without hanging the program?
目前,我正在学习 UNIX 系统上的进程。
我的问题是,每次后台进程终止时我都需要做一些事情。 这意味着我不能使用 waitpid 的典型功能,因为这样进程就不会在后台运行并且会挂起程序。
我也知道每当父进程的子进程终止时都会发送 SIGCHLD 信号,但是我不知道如何获取我需要的所述进程的进程 ID。
在 C 中解决这个问题的正确方法是什么? 我已经尝试过诸如 waitpid 上的 WNOHANG 选项之类的东西,但是这当然只会被调用一次,所以我不知道如何使其适用于我当前的情况。
waitpid 因为这样进程就不会在后台运行,它会挂起程序。
如果进程不会在后台运行,带有 pid 参数的waitpid
将立即退出(假设没有 pid 冲突)。 而且,这不是真的 - 只需使用WNOHANG
...
但是我不知道如何获取我需要的所述进程的进程 ID。 在 C 中解决这个问题的正确方法是什么?
使用sigaction
注册信号处理程序并使用si_pid
类型的第二个信号处理程序参数中的字段siginfo_t
。 来自man sigaction :
SIGCHLD 填写 si_pid、si_uid、si_status、si_utime 和 si_stime,提供孩子的信息。 si_pid 字段是子进程ID
一个使用它的工作示例位于man 3p 等待页面下的Waiting for a Child Process in a Signal Handler for SIGCHLD
。
在 C 中解决这个问题的正确方法是什么?
C 标准不知道子进程和 SIGCHLD 信号。 这些是您操作系统的一部分。 在这种情况下,行为由POSIX标准化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.