我试图了解CTRL+ 如何C终止子进程而不终止父进程。我在某些脚本外壳中看到了这种行为,例如bash您可以在其中启动一些长时间运行的进程,然后通过输入CTRL- 终止它,然后C控件返回到外壳。您能解释一下它是如何工作的,尤其是为什么父(shell)进程不会终止?外壳程序是否必须对CTRL+ C事件做一些特殊处理,如果是,它到底是做什么的?
3 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
首先,请一直阅读POSIX终端接口上的Wikipedia文章。
该SIGINT信号是由终端线纪律产生,并且广播到终端的中的所有进程前台进程组。您的外壳程序已经为您运行的命令(或命令管道)创建了一个新的进程组,并告诉终端该进程组是其(终端的)前台进程组。每个并发命令管道都有其自己的进程组,而前台命令管道是外壳程序已将其编程到终端中的进程组作为终端的前台进程组的进程。在前台和后台之间切换“工作”(除了一些细节之外)仅是shell告诉终端哪个进程组现在是前台。
Shell进程本身完全位于另一个进程组中,因此当这些进程组之一位于前台时不会接收信号。就这么简单。
- 3 回答
- 0 关注
- 1431 浏览
添加回答
举报
0/150
提交
取消