繁体   English   中英

当进程终止而不挂起程序时,如何在 C 中执行某些操作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM