fork父子进程 信号处理

终端执行一个进程,该进程创建一个子进程,当Ctrl+c后,父子进程都退出,因为,父子进程捕捉到退出信号的默认动作就是结束进程。

 

如果,在子进程中捕捉退出信号,动作改为忽略,则ctrl+c后,父进程退出,子进程不会退出,子进程被进程ID为1的init进程领养。

 

代码如下:

#include <stdio.h>
#include <signal.h>

int main()
{
	if (fork() == 0) {
		
		struct sigaction sa;
		sa.sa_handler = SIG_IGN;
		sa.sa_flags = SA_NOCLDWAIT;
		sigaction(SIGQUIT, &sa, NULL);
		sigaction(SIGTERM, &sa, NULL);
		sigaction(SIGINT, &sa, NULL);
		
		while (1) {
		
		}
		
	}
	
	sleep(3);

	while (1) {

	}

	return 0;
}

fork父子进程 信号处理_第1张图片 fork父子进程 信号处理_第2张图片

你可能感兴趣的:(fork)