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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?

發(fā)布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:李振良OK鏈接:https://blog.51cto.com/lizhenliang/1899347

哈嘍,各位新來的小伙伴們,大家好!由于公眾號做了改版,為了保證公眾號的資源能準時推送到你手里,大家記得將咱們的公眾號?加星標置頂?,在此真誠的表示感謝~

正文如下:

# 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支持的信號有:
編號信號名稱缺省動作描述
1SIGHUP終止終止進程,掛起
2SIGINT終止鍵盤輸入中斷命令,一般是CTRL+C
3SIGQUITCoreDump鍵盤輸入退出命令,一般是CTRL+\
4SIGILLCoreDump非法指令
5SIGTRAPCoreDumptrap指令發(fā)出,一般調(diào)試用
6SIGABRTCoreDumpabort(3)發(fā)出的終止信號
7SIGBUSCoreDump非法地址
8SIGFPECoreDump浮點數(shù)異常
9SIGKILL終止立即停止進程,不能捕獲,不能忽略
10SIGUSR1終止用戶自定義信號1,像Nginx就支持USR1信號,用于重載配置,重新打開日志
11SIGSEGVCoreDump無效內(nèi)存引用
12SIGUSR2終止用戶自定義信號2
13SIGPIPE終止管道不能訪問
14SIGALRM終止時鐘信號,alrm(2)發(fā)出的終止信號
15SIGTERM終止終止信號,進程會先關(guān)閉正在運行的任務(wù)或打開的文件再終止,有時間進程在有運行的任務(wù)而忽略此信號。不能捕捉
16SIGSTKFLT終止處理器棧錯誤
17SIGCHLD可忽略子進程結(jié)束時,父進程收到的信號
18SIGCONT可忽略讓終止的進程繼續(xù)執(zhí)行
19SIGSTOP停止停止進程,不能忽略,不能捕獲
20SIGSTP停止停止進程,一般是CTRL+Z
21SIGTTIN停止后臺進程從終端讀數(shù)據(jù)
22SIGTTOU停止后臺進程從終端寫數(shù)據(jù)
23SIGURG可忽略緊急數(shù)組是否到達socket
24SIGXCPUCoreDump超出CPU占用資源限制
25SIGXFSZCoreDump超出文件大小資源限制
26SIGVTALRM終止虛擬時鐘信號,類似于SIGALRM,但計算的是進程占用的時間
27SIGPROF終止類似與SIGALRM,但計算的是進程占用CPU的時間
28SIGWINCH可忽略窗口大小改變發(fā)出的信號
29SIGIO終止文件描述符準備就緒,可以輸入/輸出操作了
30SIGPWR終止電源失敗
31SIGSYSCoreDump非法系統(tǒng)調(diào)用
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ā)送信號。

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 pid

3、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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。