我有以下代码:
cmd cmd_args & WAIT_PID=$!
trap "kill -s SIGTERM $WAIT_PID" SIGTERM SIGINT SIGKILL
wait $WAIT_PID
有了这个,我想能够在有人试图杀死这个脚本时杀死任何后台进程。但是,我仍然希望将stdin重定向到后台进程,这不会发生。
我想抓住wait的标准输入并将其重定向到后台进程。为此,我试过了:
wait $WAIT_PID 0>&1 1> named_pipe
但没有任何运气。
答案 0 :(得分:1)
如上所述,您无法捕捉SIGKILL
(或SIGSTOP
)。
除此之外,试试这个:
#!/bin/bash
cmd cmd_args <&0 &
wait_pid=$!
trap "kill -s SIGTERM $wait_pid" SIGTERM SIGINT
wait $wait_pid
<&0
会告诉bash您希望cmd
的stdin成为脚本的标准输入。
稍微偏离主题,但另一种将字节转储到正在运行的进程中的有趣方法&#39; stdin是将它们直接发送到它的/proc
文件描述符,如:
echo "Stuff to send to the process" >/proc/$wait_pid/fd/0