当我终止父进程时,守护进程终止

时间:2018-02-17 12:51:54

标签: linux fork

我希望ubuntu linux上的以下代码能够创建一个守护进程,它是systemd的子进程并保持打印"做某事"。

#include <unistd.h>
#include <stdlib.h>

int main()
{
    int pid1, pid2;
    int status;

    if (pid1 = fork()) {
        waitpid(pid1, &status, NULL);
    }
    else if (!pid1) {
        if (pid2 = fork()) {
            // use exit. return sometimes stop forking
            exit(0);
        }
        else if (!pid2) {
            while(1) {
                sleep(1);
                puts("do something");
            }
        }
        else {
            perror("error occured");
            return -1;
        }
    }
    else {
        perror("error occured");
        return -1;
    }

    while(1) {
        sleep(1);
        puts("parent do something.");
    }
}

但是当我中断父进程时,它生成的守护进程也会终止。当我在后台运行代码时,守护程序只能保持活动状态。为什么会这样?

当我在后台跑步时,守护进程活着。

$ ./a.out &

parent do something.
do something
parent do something.
do something
(ctrl + c)
do something
do something
do something

守护程序在我不在后台运行时终止。

$ ./a.out

parent do something.
do something
parent do something.
do something
(ctrl + c)
// not printing anymore
$

1 个答案:

答案 0 :(得分:0)

当您在前台运行时,终端生成的中断信号将转到组(父级和子级)。在the following unix exchange answer中有更多相关信息。

在后台运行时,进程不会监听终端的中断信号。所以按下ctrl+c根本没有效果。