sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?
生活随笔
收集整理的這篇文章主要介紹了
sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
作者:李振良OK鏈接:https://blog.51cto.com/lizhenliang/1899347
CoreDump(核心轉(zhuǎn)儲):當(dāng)程序運行過程中異常退出時,內(nèi)核把當(dāng)前程序在內(nèi)存狀況存儲在一個core文件中,以便調(diào)試。Linux支持兩種信號:一種是標準信號,編號1-31,稱為非可靠信號(非實時),不支持隊列,信號可能會丟失,比如發(fā)送多次相同的信號,進程只能收到一次,如果第一個信號沒有處理完,第二個信號將會丟棄。另一種是擴展信號,編號32-64,稱為可靠信號(實時),支持隊列,發(fā)多少次進程就可以收到多少次。信號類型比較多,我們只要了解下,記住幾個常用信號就行了,紅色標記的我覺得需要記下。發(fā)送信號一般有兩種情況:一種是內(nèi)核檢測到系統(tǒng)事件,比如鍵盤輸入CTRL+C會發(fā)送SIGINT信號。另一種是通過系統(tǒng)調(diào)用kill命令來向一個進程發(fā)送信號。
哈嘍,各位新來的小伙伴們,大家好!由于公眾號做了改版,為了保證公眾號的資源能準時推送到你手里,大家記得將咱們的公眾號?加星標置頂?,在此真誠的表示感謝~
正文如下:
# Linux信號類型
信號(Signal):信號是在軟件層次上對中斷機制的一種模擬,通過給一個進程發(fā)送信號,執(zhí)行相應(yīng)的處理函數(shù)。進程可以通過三種方式來響應(yīng)一個信號:1)忽略信號,即對信號不做任何處理,其中有兩個信號不能忽略:SIGKILL及SIGSTOP。2)捕捉信號。3)執(zhí)行缺省操作,Linux對每種信號都規(guī)定了默認操作。Linux究竟采用上述三種方式的哪一個來響應(yīng)信號呢?取決于傳遞給響應(yīng)的API函數(shù)。Linux支持的信號有:| 編號 | 信號名稱 | 缺省動作 | 描述 |
| 1 | SIGHUP | 終止 | 終止進程,掛起 |
| 2 | SIGINT | 終止 | 鍵盤輸入中斷命令,一般是CTRL+C |
| 3 | SIGQUIT | CoreDump | 鍵盤輸入退出命令,一般是CTRL+\ |
| 4 | SIGILL | CoreDump | 非法指令 |
| 5 | SIGTRAP | CoreDump | trap指令發(fā)出,一般調(diào)試用 |
| 6 | SIGABRT | CoreDump | abort(3)發(fā)出的終止信號 |
| 7 | SIGBUS | CoreDump | 非法地址 |
| 8 | SIGFPE | CoreDump | 浮點數(shù)異常 |
| 9 | SIGKILL | 終止 | 立即停止進程,不能捕獲,不能忽略 |
| 10 | SIGUSR1 | 終止 | 用戶自定義信號1,像Nginx就支持USR1信號,用于重載配置,重新打開日志 |
| 11 | SIGSEGV | CoreDump | 無效內(nèi)存引用 |
| 12 | SIGUSR2 | 終止 | 用戶自定義信號2 |
| 13 | SIGPIPE | 終止 | 管道不能訪問 |
| 14 | SIGALRM | 終止 | 時鐘信號,alrm(2)發(fā)出的終止信號 |
| 15 | SIGTERM | 終止 | 終止信號,進程會先關(guān)閉正在運行的任務(wù)或打開的文件再終止,有時間進程在有運行的任務(wù)而忽略此信號。不能捕捉 |
| 16 | SIGSTKFLT | 終止 | 處理器棧錯誤 |
| 17 | SIGCHLD | 可忽略 | 子進程結(jié)束時,父進程收到的信號 |
| 18 | SIGCONT | 可忽略 | 讓終止的進程繼續(xù)執(zhí)行 |
| 19 | SIGSTOP | 停止 | 停止進程,不能忽略,不能捕獲 |
| 20 | SIGSTP | 停止 | 停止進程,一般是CTRL+Z |
| 21 | SIGTTIN | 停止 | 后臺進程從終端讀數(shù)據(jù) |
| 22 | SIGTTOU | 停止 | 后臺進程從終端寫數(shù)據(jù) |
| 23 | SIGURG | 可忽略 | 緊急數(shù)組是否到達socket |
| 24 | SIGXCPU | CoreDump | 超出CPU占用資源限制 |
| 25 | SIGXFSZ | CoreDump | 超出文件大小資源限制 |
| 26 | SIGVTALRM | 終止 | 虛擬時鐘信號,類似于SIGALRM,但計算的是進程占用的時間 |
| 27 | SIGPROF | 終止 | 類似與SIGALRM,但計算的是進程占用CPU的時間 |
| 28 | SIGWINCH | 可忽略 | 窗口大小改變發(fā)出的信號 |
| 29 | SIGIO | 終止 | 文件描述符準備就緒,可以輸入/輸出操作了 |
| 30 | SIGPWR | 終止 | 電源失敗 |
| 31 | SIGSYS | CoreDump | 非法系統(tǒng)調(diào)用 |
2、kill命令
kill命令發(fā)送信號給進程。命令格式:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...kill -l [sigspec]-s ?# 信號名稱-n ?# 信號編號-l ?# 打印編號1-31信號名稱示例:給一個進程發(fā)送終止信號:kill -s SIGTERM pid或kill -n 15 pid或kill -15 pid或kill -TREM pid3、trap命令
trap命令定義shell腳本在運行時根據(jù)接收的信號做相應(yīng)的處理。命令格式:trap [-lp] [[arg] signal_spec ...]-l ?????????#打印編號1-64編號信號名稱arg ????????# 捕獲信號后執(zhí)行的命令或者函數(shù)signal_spec # 信號名或編號一般捕捉信號后,做以下幾個動作:1)清除臨時文件2)忽略該信號3)詢問用戶是否終止腳本執(zhí)行示例1:按CTRL+C不退出循環(huán)#!/bin/bashtrap "" 2 # 不指定arg就不做任何操作,后面也可以寫多個信號,以空格分隔 for i in {1..10}; do echo $i sleep 1done# bash a.sh123^C456^C78910示例2:循環(huán)打印數(shù)字,按CTRL+C退出,并打印退出提示#!/bin/bashtrap "echo 'exit...';exit" 2for i in {1..10}; do echo $i sleep 1done # bash test.sh123^Cexit...示例3:讓用戶選擇是否終止循環(huán)#!/bin/bashtrap "func" 2func() { read -p "Terminate theprocess? (Y/N): " input if [ $input == "Y"] ; then exit fi } for i in {1..10}; do echo $i sleep 1done # bash a.sh123^CTerminate the process? (Y/N): Y# bash a.sh 123^CTerminate the process? (Y/N): N456...熱門推薦:- 牛逼!竟然純Java打造一款SSH客戶端,而且已開源~
- 推薦一款牛逼的IDEA神器,再也不怕女同事用“爛代碼”來偷襲我啦~
- Github 2020年報告出爐了,你是那只最勤勞的章魚貓嗎?網(wǎng)友:我的項目star數(shù)還是0...
總結(jié)
以上是生活随笔為你收集整理的sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10万元理财一个月收益多少?列举四种理财
- 下一篇: OpenGL: 实现立体显示