【发布时间】:2018-07-28 05:32:26
【问题描述】:
我希望 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
$
【问题讨论】: