终端执行一个进程,该进程创建一个子进程,当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父子进程 信号处理fork父子进程 信号处理

相关文章:

  • 2021-07-14
  • 2021-07-27
  • 2021-04-29
  • 2021-12-10
  • 2021-06-12
  • 2021-09-21
  • 2022-01-18
  • 2021-12-21
猜你喜欢
  • 2021-04-05
  • 2021-09-02
  • 2021-05-22
  • 2021-10-21
  • 2021-10-12
  • 2021-11-24
  • 2021-08-16
  • 2021-04-08
相关资源
相似解决方案