[英]My shell segfault when I do “kill -11 0”
當我嘗試在bash,tcsh或zsh上執行命令“ / bin / kill -11 0”時,它不是segfault,但是當我嘗試在我的中執行該命令時,它會執行。
所以我必須有一些我沒有處理過的東西。
你知道會是什么嗎?
謝謝。
您的程序在發送信號11時實際上並沒有發生段錯誤。
如果程序的執行導致“段故障”(即,程序執行了非法的內存引用),則操作系統將發送程序SIGSEGV(Linux上的信號11)。 程序無法區分是由程序故障導致的操作系統發送的SIGSEGV,還是由於可能來自另一個進程的調用raise
或kill
發出的SIGSEGV,因此它會做出響應,就好像出現了實際的程序錯誤一樣。
如果要保護shell免受子進程發送給pid 0的信號的影響,則需要通過在fork之后調用子進程中的setpgid來確保子進程位於不同的進程組中。
默認情況下,程序由SIGSEGV終止。 默認情況下,調用該程序的外殼程序將報告該程序已被SIGSEGV終止。 這通常稱為“段錯誤”,但如上所述,它可能不是實際程序錯誤的結果。
如果您想讓程序執行其他操作,則必須使用信號處理程序來捕獲信號SIGSEGV。 例如,如果需要在程序終止之前進行一些清理。 大多數外殼程序(和數據庫)都可以這樣做,但是在用戶代碼中很少需要這樣做。
注意: Signal 11在Linux上是SIGSEGV
,但是不能保證SIGSEGV
在不同的OS(甚至是將來的Linux版本)上將是Signal 11。 您應該始終使用信號的名稱而不是數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.