Dra*_*scu 5 linux bash shell signals bash-trap
我正在尝试在我的脚本中获取 SIGSTOP CTRL+信号。Ztrap
当我的脚本正在执行时,如果我暂时暂停执行,发送 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
Run Code Online (Sandbox Code Playgroud)
编辑:
SIGSTOP不能被捕获,但是SIGTSTP可以被捕获,根据我在互联网上搜索CTRL和下面的答案后的理解,用+发送信号时捕获是正确的Z。但是,当我在运行脚本时按CTRL+时,它将被卡住,这意味着无论我之后发送什么信号,脚本都会无限执行。
Z
这里的问题是您试图暂停一个已经处于睡眠状态的进程。
DIR=$(mktemp -d)在 shell 脚本中使用来创建临时目录也是一个很好的做法。
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
Run Code Online (Sandbox Code Playgroud)
如果您将一个函数发送到后台(例如光标旋转器) - 那么您需要禁用CTRL-Z当长进程运行时:
trap "" SIGTSTP
Run Code Online (Sandbox Code Playgroud)