繁体   English   中英

通知父流程

[英]Notification to a parent process

使用fork系统调用时,我已经多次看到父级调用waitpid以便子级可以完成操作。

我的问题是孩子是否将通知发送给家长。 在不使用任何共享资源的情况下,父母如何识别孩子已完成?

子级退出时,操作系统将SIGCHLD发送给父级。 您可以选择使用WNOHANG轮询waitpid() ,也可以选择在接收到SIGCHLD之后使用wait()进行检查。 子进程不需要做任何特别的事情,这全部由OS管理。

在Linux操作系统中,每个子对象都有一个父对象,即使父对象在该子对象之前死亡,该子对象也由init(PID:1)进程继承。 这样做是为了避免任何僵尸进程(进程表中存在进程条目,但进程实际上已经死亡)不占用内存空间。

内核会密切关注所有由于完全执行或其他原因(例如无效的内存访问)而死亡的进程,并保留一些信息,例如子进程的退出状态。 当子级终止时, SIGCHLD信号将发送给父级。 默认情况下,信号只是被忽略。 但是,通常在SIGCHLD的处理程序中实现了wait()系统调用,以便父级可以对子级的退出状态进行操作。

除了接收Erik 提到SIGCHLD之外,您还可以使用WNOHANG轮询孩子感兴趣的事件。 这是一个例子:

pid_t pid = fork();
if (pid) {
    while (1) {
        int status;
        int waitpid(pid, &status, WNOHANG);
        if (pid == waitpid && WIFEXITED(status))
            break;            
        // do other stuff
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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