【发布时间】:2014-02-01 18:58:47
【问题描述】:
我正在后台从我的 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 被覆盖,当陷阱到达时我无法杀死它。
【问题讨论】:
标签: bash unix signals tcl orphan