![](/img/trans.png)
[英]How to trap CTRL+Z in Linux POSIX shell script; possible or not?
[英]Shell Script get CTRL+Z with Trap
我試圖在我的腳本trap
獲取SIGSTOP CTRL + Z信號。
當我的腳本執行時,如果我暫停執行,發送SIGSTOP信號CTRL + Z ,它需要刪除我在其中創建的文件並終止執行。
我不明白為什么以下腳本不起作用。 但是,更重要的是,正確的方法是什么?
#!/bin/bash
DIR="temp_folder"
trap "rm -r $DIR; kill -SIGINT $$" SIGSTP
if [ -d $DIR ]
then
rm -r $DIR
else
mkdir $DIR
fi
sleep 5
編輯 :
SIGSTOP
不能被捕獲,但是SIGTSTP
可以被捕獲,並且根據我在互聯網上搜索后的理解和下面的答案,使用CTRL + Z發送信號時捕獲是正確的。 但是,當我在運行腳本時按CTRL + Z時它會卡住 ,這意味着無論后來發送什么信號,腳本都會無限執行。
這里的問題是你試圖暫停已經睡覺的進程。
在shell腳本中使用DIR=$(mktemp -d)
來創建臨時目錄也是一種好習慣。
CTRL - C是信號( 2
)/ CTRL - Z ( 20
):
catch_exits() {
printf "\n$(basename $0): exiting\n" 1>&2
rm -rf $DIR
exit 1
}
trap catch_exits 1 2 3 15 20
DIR="$(mktemp -d)"
read -p "not sleeping" test
如果你向后台發送一個函數(比如游標微調器) - 那么你需要在長進程運行時禁用CTRL - Z :
trap "" SIGTSTP
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.