我有一个简单的 bash 脚本,它可以响应
SIGUSR{1,2}
,同时在后台运行 GUI 程序:
#!/usr/bin/env bash
trap 'echo trapping && sleep inf' USR1 USR2
echo $$
gnome-calculator &>/dev/null &
sleep inf
(随意将
gnome-calculator
替换为任何其他 GUI 程序)
然后我使用脚本打印的 PID 运行
kill -USR1
,并且脚本正确地回显 "trapping"
作为响应。但不幸的是,gnome-calculator
在这个过程中被杀了。
有没有办法让信号不会传播到其子进程?看起来你可以做类似
trap '' USR1 USR2
的事情,但我想实际上做一些事情来响应信号。
这样做
trap 'echo hello' USR1 USR2
gnome-calculator >/dev/null 2>&1 &
echo $$
until wait; do
:
done
并发送信号
kill -USR1 123