日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

忽略所有信号导致的程序Ctrl+c和Ctrl+z无法退出问题,以及信号表详解

發布時間:2025/3/13 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 忽略所有信号导致的程序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
    幾點比較重要的,我列舉以下:

  • 可以使用signal函數(移植性不好,功能簡單)或者sigaction函數來改變信號抵達的處理動作。
  • 信號的處理動作是進程屬性,所以一個進程里的多個線程,信號的處理動作是相同的。
  • 一些系統調用可以發送信號,例如:kill函數、pthread_kill函數、raise函數等等。
  • Linux下查看支持的信號列表
    在這里插入圖片描述

  • 列表中,編號為1 ~ 31的信號為傳統UNIX支持的信號,是不可靠信號(非實時的)
  • 編號為32 ~ 63的信號是后來擴充的,稱做可靠信號(實時信號)。
  • 不可靠信號和可靠信號的區別在于前者不支持排隊,可能會造成信號丟失,而后者不會。
  • 信號簡要說明
    在這里插入圖片描述在這里插入圖片描述

    信號詳細說明

  • 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无法退出问题,以及信号表详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。