Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通知父进程_C++_C_Fork - Fatal编程技术网

C++ 通知父进程

C++ 通知父进程,c++,c,fork,C++,C,Fork,在使用fork系统调用时,我多次看到父级调用waitpid以便子级可以完成 我这里的问题是,孩子是否在处理前向家长发送通知。在不使用任何共享资源的情况下,家长如何识别chils已完成 当子系统退出时,操作系统向父系统发送一个SIGCHLD。您可以选择使用WNOHANG轮询waitpid(),或者在收到SIGCHLD后仅使用wait()进行检查。子进程不需要做任何特别的事情,这都是由操作系统管理的。当子进程退出时,操作系统向父进程发送一个SIGCHLD。您可以选择使用WNOHANG轮询waitpi

在使用fork系统调用时,我多次看到父级调用waitpid以便子级可以完成


我这里的问题是,孩子是否在处理前向家长发送通知。在不使用任何共享资源的情况下,家长如何识别chils已完成

当子系统退出时,操作系统向父系统发送一个
SIGCHLD
。您可以选择使用
WNOHANG
轮询
waitpid()
,或者在收到
SIGCHLD
后仅使用
wait()
进行检查。子进程不需要做任何特别的事情,这都是由操作系统管理的。

当子进程退出时,操作系统向父进程发送一个
SIGCHLD
。您可以选择使用
WNOHANG
轮询
waitpid()
,或者在收到
SIGCHLD
后仅使用
wait()
进行检查。子进程不需要做任何特别的事情,这都是由操作系统管理的。

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


内核关注所有由于完全执行或其他原因(如无效内存访问)而死亡的进程,并保留一些信息,如子进程的退出状态。当子级终止时,将向父级发送一个
SIGCHLD
信号。默认情况下,该信号被忽略。然而,通常在SIGCHLD的处理程序中实现
wait()。这样做的目的是,不应该有任何僵尸进程(进程条目在进程表中,但进程实际上已经死了)占用了无用的内存空间


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

除了按接收
SIGCHLD
之外,您还可以使用轮询子级以查找感兴趣的事件。下面是一个例子:

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

除了按接收
SIGCHLD
外,您还可以使用轮询子项以查找感兴趣的事件。下面是一个例子:

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