我希望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
$
答案 0 :(得分:0)
当您在前台运行时,终端生成的中断信号将转到组(父级和子级)。在the following unix exchange answer中有更多相关信息。
在后台运行时,进程不会监听终端的中断信号。所以按下ctrl+c
根本没有效果。