忽略所有信号导致的程序Ctrl+c和Ctrl+z无法退出问题,以及信号表详解
首先,出現的問題:Ctrl+c和Ctrl+z甚至正常的殺程序,都無法讓執行的程序退出
出現問題的原因
在程序中 調用CloseIOAndSignal函數時,將所有的信號全部執行忽略和關閉操作,因此,當按Ctrl+c和Ctrl+z時,程序無法正常關閉
至于到底什么原因 ,為什么教程里讓關閉所有信號就沒錯,我關閉所有信號就有錯,這個我沒有搞清楚,還有信號機制仍然一知半解,這個慢慢再學習
解決辦法:
用命令:kill -9 進程號
下面是所查資料
關于kill -9 和 普通kill 的詳解
kill -9 和 kill 有什么區別
轉自kill -9 和 kill 有什么區別
區別:
kill -9 id:
一般不加參數kill是使用15來殺,
這相當于正常停止進程,
停止進程的時候會釋放進程所占用的資源;
他們的區別就好比電腦關機中的軟關機
(通過“開始”菜單選擇“關機”)與硬關機
(直接切斷電源),雖然都能關機,
但是程序所作的處理是不一樣的。
kill - 9 表示強制殺死該進程;而 kill 則有局限性,例如后臺進程,守護進程等;
執行kill命令,
系統會發送一個SIGTERM信號給對應的程序。
SIGTERM多半是會被阻塞的。
kill -9命令,系統給對應程序發送的信號是SIGKILL,
即exit。exit信號不會被系統阻塞,
所以kill -9能順利殺掉進程。
最后,轉載別人博客上的信號表詳解
轉載自:
Linux常用信號列表
SIGNAL
幾點比較重要的,我列舉以下:
Linux下查看支持的信號列表
在這里插入圖片描述
信號簡要說明
在這里插入圖片描述在這里插入圖片描述
信號詳細說明
SIGHUP (1) 本信號在用戶終端連接(正?;蚍钦?結束時發出,通常是在終端的控制進程結束時,通知同一session內的各個作業,這時它們與控制終端不再關聯。
SIGINT (2) 程序終止(interrupt)信號,在用戶鍵入INTR字符(通常是Ctrl + C)時發出。
SIGQUIT (3) 和SIGINT類似,但由QUIT字符(通常是Ctrl + )來控制。進程在因收到 SIGQUIT退出時會產生core文件,在這個意義上類似于一個程序錯誤信號。
SIGILL (4) 執行了非法指令。通常是因為可執行文件本身出現錯誤,或者試圖執行數據段的堆棧溢出時也有可能產生這個信號。
SIGTRAP (5) 由斷點指令或其它trap指令產生,由debugger使用。
SIGABRT (6) 程序自己發現錯誤并調用abort時產生。
SIGIOT (6) 在PDP-11上由iot指令產生,在其它機器上和SIGABRT一樣。
SIGBUS (7) 非法地址,包括內存地址對齊(alignment)出錯。舉例:訪問一個四個字長的整數,但其地址不是4的倍數。
SIGFPE (8) 在發生致命的算術運算錯誤時發出。不僅包括浮點運算錯誤,還包括溢出及除數為0等其它所有的算術的錯誤。
SIGKILL (9) 用來立即結束程序的運行。本信號不能被阻塞、處理和忽略。
SIGUSR1 (10) 留給用戶使用。
SIGSEGV (11) 段錯誤,試圖訪問未分配給自己的內存,或試圖往沒有寫權限的內存地址寫數據。
SIGUSR2 (12) 留給用戶使用。
SIGPIPE (13) Broken pipe。
SIGALRM (14) 時鐘定時信號,計算的是實際的時間或時鐘時間。alarm函數使用該信號。
SIGTERM (15) 程序結束(terminate)信號。與SIGKILL不同的是該信號可以被阻塞和處理。通常用來要求程序自己正常(優雅地)退出。shell命令kill缺省產生這個信號。
SIGCHLD (17) 子進程結束時,父進程會收到這個信號。
SIGCONT (18) 讓一個停止(stopped)的進程繼續執行。本信號不能被阻塞??梢杂靡粋€handler來讓程序在由stopped狀態變為繼續執行時完成特定的工作。例如:重新顯示提示符。
SIGSTOP (19) 停止(stopped)進程的執行。注意它和terminate以及interrupt的區別:該進程還未結束,只是暫停執行。本信號不能被阻塞、處理或忽略。
SIGTSTP (20) 停止進程的運行,但該信號可以被處理和忽略。用戶鍵入SUSP字符時 (通常是Ctrl + Z)發出這個信號。
SIGTTIN (21) 當后臺作業要從用戶終端讀數據時,該作業中的所有進程會收到SIGTTIN 信號。缺省時這些進程會停止執行。
22.SIGTTOU (22) 類似于SIGTTIN,但在寫終端(或修改終端模式)時收到。
SIGURG (23) 有“緊急“數據或out-of-band數據到達socket時產生。
SIGXCPU (24) 超過CPU時間資源限制。這個限制可以由getrlimit/setrlimit來讀取或者改變。
SIGXFSZ (25) 超過文件大小資源限制。
SIGVTALRM (26) 虛擬時鐘信號。類似于SIGALRM,但是計算的是該進程占用的CPU時間。
SIGPROF (27) 類似于SIGALRM/SIGVTALRM,但包括該進程用的CPU時間以及系統調用的時間。
SIGWINCH (28) 窗口大小改變時發出。
SIGIO (29) 文件描述符準備就緒,可以開始進行輸入/輸出操作。
SIGPWR (30) Power failure。
總結
以上是生活随笔為你收集整理的忽略所有信号导致的程序Ctrl+c和Ctrl+z无法退出问题,以及信号表详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 库函数设计:关于文件类打开操作函数不自动
- 下一篇: qxidc项目/crtsurfdata程