26 bash shell中的訊號

2022-06-11 02:03:09 字數 1723 閱讀 4773

當沒有任何捕獲時,乙個互動式 bash shell 會忽略 sigterm(傳送到程序的 term 訊號用於要求程序終止) 和 sigquit(當使用者要求程序執行 core dump 時,quit 訊號由程序的控制終端傳送到程序) 訊號。由 bash 執行的非內部命令會使用 shell 從其父程序繼承的訊號處理程式。如果沒有啟用作業控制,非同步執行的命令會忽略除了有這些訊號處理程式之外的 sigint 和 sigquit 訊號。由於命令替換而執行的命令會忽略鍵盤產生的作業控制訊號sigttin(後台程序嘗試讀取時,ttin 訊號會被傳送到程序)、sigttou(後台程序嘗試輸出時,ttou 訊號會被傳送到程序) 和 sigtstp(tstp 訊號由程序的控制終端傳送到程序來要求它立即終止)。

預設情況下,shell 接收到 sighup 訊號後會退出。在退出之前,乙個互動式的 shell 會向所有的作業,不管是正在執行的還是已停止的,重新傳送 sighup 訊號。對已停止的作業,shell 還會傳送 sigcont訊號(繼續程序)以確保它能夠接收到 sighup 訊號。

若要阻止 shell 向某個特定的作業傳送 sighup 訊號,可以使用內部命令 disown 將它從作業表中移除,或是用「disown -h」命令阻止 shell 向特定的作業傳送 sighup 訊號,但並不會將特定的作業從作業表中移除。

我們通過如下例項,來了解一下 disown 命令的作用:

命令結果

sleep 30 & #將 sleep 命令放在後台執行,休眠30秒

[1] 90021

jobs -l #列出當前 shell 下所有作業的資訊

[1]+ 90021 running      sleep 30 &

disown %1 #將作業1從作業表中移除

jobs -l #再次列出當前 shell 下所有作業的資訊

ps -ef | grep sleep #查詢 sleep 程序

echo $$ #列印當前 shell 的程序號

在上述例項中,我們首先將命令「sleep 30」放在後台執行,此時,我們使用命令「jobs -l」可以看到作業表中有乙個正在執行的作業,然後,我們使用命令「disown %1」將作業1從作業表中移除,再使用命令「jobs -l」會看到作業表中已經沒有了作業,但是我們發現其實「sleep 30」這個命令的程序仍然存在。此時,shell 若接收到 sighup 訊號,它就不會向作業1重新傳送 sighup 訊號,此時如果我們退出 shell,這個作業仍將繼續執行,而不會被終止。

我們再來看一下命令「disown -h」的用途:

命令結果

sleep 30 & #將 sleep 命令放在後台執行,休眠30秒

[1] 91133

jobs -l #列出當前 shell 下所有作業的資訊

[1]+ 91133 running       sleep 30 &

disown -h %1 #阻止 shell 向作業1傳送 sighup 訊號

jobs -l

[1]+ 91133 running         sleep 30 &

我們看到,在執行了命令「disown -h %1」後,作業1並沒有從作業表中移除,但它己經被標記,所以即使 shell 收到 sighup 訊號也不會向此作業傳送 sighup 訊號。因此, 如果此時我們退出 shell,這個作業也仍將繼續執行,而不會被終止。

注意:如果使用內部命令 shopt 開啟了 shell 的 huponexit 選項,當乙個互動式的登入 shell 退出時,會向所有的作業傳送 sighup 訊號。

bash shell 中if的用法

條件判斷的寫法 條件表示式 條件表示式 注意這裡在中開始和結尾需要空格,不然執行會出錯 例子 bin bash a 0b 1 a eq b echo a不等於b 片這裡提一下bash shell中一些需要注意的東西 1整數比較 eq 表示 ne 表示 gt 表示 lt 表示 ge 表示 le表示 2...

bash shell中的數學計算

在寫shell指令碼的時候會用到很多的數 算,簡單的乙個游標 1 1,或者更多一點的浮點運算等,shell中數學計算稍麻煩,我想每個人都試過var 1 1 或者var 1這類錯誤。下面對shell中做數學計算小做總結 其他的減乘除類似,要注意乘法中的 號需要做轉義 即可 bc更常用,對運算來說也更好...

十 Linux中bash shell的使用

1.檢視ubuntu系統中可用的shell種類 在 etc shells 這個檔案中 vim etc shells 由上圖可知ubuntu支援的常用的shell種類。不過我們常用是bash shell 2.cat etc passwd 可知系統登入時選擇bash shell作為shell。3.bas...