我的几个常规程序(定期)崩溃,并显示消息“用户定义的信号1”。 我知道有一个nohup命令,但是有一个nousr1命令? 或者什么东西可以做nohup但是用USR1呢?
一个简单的hacky解决scheme可以让这个工具类似于nohup ,但是对于SIGUSR1 ,将得到一个coreutils源代码的副本,解压它,做
sed -i 's/SIGHUP/SIGUSR1/' /path/to/coreutils/src/nohup.c
,也可以select更改输出文件名称
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
在此之后,正如我所检查的,在USR1上sleep 1000 ,而nousr1 sleep 1000对此信号nousr1 sleep 1000 。
如何壳trap内置命令?
trap 'echo "Thou shalt not USR1 me"' USR1
您需要使用带有空白参数的trap命令的forms。 尝试这个:
trap '' SIGUSR1; myprogram
这将忽略 SIGUSR1信号,这是你正在做的。 虽然我同意这些评论者的观点,可能还有更多的事情要做。
不正确的forms:
trap 'echo ...' SIGUSR1; myprogram
仍然允许myprogram接收SIGUSR1,但是shell会从trap命令执行echo 。