簡體   English   中英

Shell腳本使用Trap獲得CTRL + Z.

[英]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它會卡住 ,這意味着無論后來發送什么信號,腳本都會無限執行。 在此輸入圖像描述

有兩個信號你無法trap *, SIGKILLSIGSTOP 使用另一個信號。

*:無需修改內核

IEEE標准

為SIGKILL或SIGSTOP設置陷阱會產生未定義的結果。

這里的問題是你試圖暫停已經睡覺的進程。

在shell腳本中使用DIR=$(mktemp -d)來創建臨時目錄也是一種好習慣。

CTRL - C是信號( 2 )/ CTRL - Z20 ):

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM