我正在从我的 tcl 脚本在后台执行一个 shell 脚本。tcl 脚本在一段时间后结束执行。此时我假设后台 shell 脚本成为孤立脚本并被 init 采用。
set res [catch { exec sudo $script &}]
现在的问题是我无法向我的(孤立的)后台脚本发出信号。但为什么?好的,它现在属于 init 但为什么我不能发出信号。只有 sigkill 似乎有效并且杀死了它 - 我需要触发我编写的信号处理程序来处理 SIGUSR2
trap 'process' SIGUSR2
为什么我不能向我的孤立后台进程发出信号?有没有办法做到这一点?还是有一些解决方法?
编辑:不涉及睡眠时似乎工作正常。请参阅下面的示例代码:
trap 'kill `cat /var/run/sleep.pid`; foo' SIGUSR2;
foo(){ echo test; }
while true; do
echo -n .
sleep 100 &
echo ${!} > /var/run/sleep.pid
wait ${!}
done
没有孤立时工作正常 - 但在孤立进程的情况下,我认为问题是真正的睡眠 pid 被覆盖,当陷阱到达时我无法杀死它。