信号处理程序的父和子行为

Pun*_*eet 13 unix

在为[SIGINT]注册信号处理程序之后,进程有一个'fork'调用.通过命令行发送SIGINT时会发生什么?父母是退出还是孩子或两者兼而有之?父母和孩子都在循环中运行无限.

Ant*_*nko 16

如果在注册信号处理程序后fork(不再进一步exec*),将在父进程和子进程中使用相同的信号处理程序.也就是说,如果你exitSIGINT处理程序之外做了其他事情,那么父母和孩子都不会退出(SIGINT这里发送的方式与此无关).

如果您的意思是SIGINT终端发送(vintr通常是字符Ctrl+C):它将由使用终端作为控制终端的进程接收.也就是说,除非您将孩子或父母从控制终端分离,否则他们都会Ctrl+C通过致电您的SIGINT处理程序做出反应.

  • @Puneet它*是由孩子继承的,无论你怎么想它应该*.见'man sigaction`.这有什么奇怪的?在继承`fork`之前打开的文件描述符.关于信号的唯一特殊之处是非执行,非忽略*处理程序*在`execve`和朋友上重置(因为处理程序的地址在新的可执行文件中没有意义),但是在`fork`上没有这样的事情. (5认同)