我的几个常规程序经常崩溃,并显示“用户定义信号 1”消息。我知道有一个nohup
命令,但是有nousr1
命令吗?或者可以执行类似操作nohup
但使用 USR1 的命令?
答案1
一个简单的 hacky 解决方案,可以得到类似于的实用程序nohup
,但是SIGUSR1
,是获取一份核心工具来源,解压,执行
sed -i 's/SIGHUP/SIGUSR1/' /path/to/coreutils/src/nohup.c
,也可以选择更改输出文件名
sed -i 's/nohup\.out/nousr1.out/g' /path/to/coreutils/src/nohup.c
,编译此源并将新编译的nohup
二进制文件安装到/usr/bin/nousr1
:
cp /path/to/coreutils/src/nohup /usr/bin/nousr1
此后,据我检查,sleep 1000
退出USR1
,而nousr1 sleep 1000
不受该信号影响。
答案2
外壳怎么样trap
内置命令?
trap 'echo "Thou shalt not USR1 me"' USR1
答案3
trap
您需要使用带有空白参数的命令形式。试试这个:
trap '' SIGUSR1; myprogram
这会忽略SIGUSR1 信号,这就是您要尝试执行的操作。尽管我同意评论者的观点,但这里发生的事情可能比表面上看到的要多。
错误形式:
trap 'echo ...' SIGUSR1; myprogram
仍将允许myprogram
接收 SIGUSR1,但 shell 随后将执行echo
命令trap
。