我試圖了解CTRL+ 如何C終止子進程而不終止父進程。我在某些腳本外殼中看到了這種行為,例如bash您可以在其中啟動一些長時間運行的進程,然后通過輸入CTRL- 終止它,然后C控件返回到外殼。您能解釋一下它是如何工作的,尤其是為什么父(shell)進程不會終止?外殼程序是否必須對CTRL+ C事件做一些特殊處理,如果是,它到底是做什么的?
3 回答

郎朗坤
TA貢獻1921條經(jīng)驗 獲得超9個贊
首先,請一直閱讀POSIX終端接口上的Wikipedia文章。
該SIGINT信號是由終端線紀(jì)律產(chǎn)生,并且廣播到終端的中的所有進程前臺進程組。您的外殼程序已經(jīng)為您運行的命令(或命令管道)創(chuàng)建了一個新的進程組,并告訴終端該進程組是其(終端的)前臺進程組。每個并發(fā)命令管道都有其自己的進程組,而前臺命令管道是外殼程序已將其編程到終端中的進程組作為終端的前臺進程組的進程。在前臺和后臺之間切換“工作”(除了一些細節(jié)之外)僅是shell告訴終端哪個進程組現(xiàn)在是前臺。
Shell進程本身完全位于另一個進程組中,因此當(dāng)這些進程組之一位于前臺時不會接收信號。就這么簡單。
添加回答
舉報
0/150
提交
取消