如果我們從shell啓動一個前臺進程,並使用ctrl-c傳遞一個它不處理並因此退出的SIGINT,shell如何知道進程是否被終止由SIGINT提供。我的假設是,這個過程不會通過調用exit來進入殭屍。shell如何將SIGINT識別爲其作業之一
感謝
如果我們從shell啓動一個前臺進程,並使用ctrl-c傳遞一個它不處理並因此退出的SIGINT,shell如何知道進程是否被終止由SIGINT提供。我的假設是,這個過程不會通過調用exit來進入殭屍。shell如何將SIGINT識別爲其作業之一
感謝
shell使用wait(2)
家族的函數來等待子進程終止/終止,並檢索殺死它的信號(如果有的話)。
不處理信號的應用程序,實際執行的默認處理程序(它可以殺死應用程序中的SIGINT
的情況下)。嚮應用程序發送信號並調用處理程序(無論是默認的還是由應用程序設置的)由操作系統處理,因此操作系統可以注意哪個信號會中止應用程序,例如相應地設置退出代碼。 shell只顯示退出代碼,但它是設置它的操作系統。
但在這裏進程沒有退出調用exit(),所以等待方法不會得到任何回報。 – 0xhacker 2013-03-03 17:55:41
是的,請閱讀:https://www.kernel.org/doc/man-pages/online/pages/man2/wait.2.html – Intrepidd 2013-03-03 17:56:59