簡體   English   中英

當我執行“ kill -11 0”時,我的shell段錯誤

[英]My shell segfault when I do “kill -11 0”

當我嘗試在bash,tcsh或zsh上執行命令“ / bin / kill -11 0”時,它不是segfault,但是當我嘗試在我的中執行該命令時,它會執行。

所以我必須有一些我沒有處理過的東西。

你知道會是什么嗎?

謝謝。

您的程序在發送信號11時實際上並沒有發生段錯誤。

如果程序的執行導致“段故障”(即,程序執行了非法的內存引用),則操作系統將發送程序SIGSEGV(Linux上的信號11)。 程序無法區分是由程序故障導致的操作系統發送的SIGSEGV,還是由於可能來自另一個進程的調用raisekill發出的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM