bash - 不要将信号传播到子进程

问题描述 投票:0回答:1

我有一个简单的 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
的事情,但我想实际上做一些事情来响应信号。

bash shell
1个回答
0
投票

这样做

trap 'echo hello' USR1 USR2
gnome-calculator >/dev/null 2>&1 &
echo $$
until wait; do
        :
done

并发送信号

kill -USR1 123
© www.soinside.com 2019 - 2024. All rights reserved.