我有以下代码:
cmd cmd_args & WAIT_PID=$!
trap "kill -s SIGTERM $WAIT_PID" SIGTERM SIGINT SIGKILL
wait $WAIT_PID
有了这个,我希望能够在有人试图杀死这个脚本时杀死任何后台进程。但是,我仍然希望将 stdin 重定向到后台进程,但这并没有发生。
我想获取等待的标准输入并将其重定向到后台进程。为此,我尝试过:
wait $WAIT_PID 0>&1 1> named_pipe
但没有任何运气。
最佳答案
如前所述,你无法捕获 SIGKILL
(或SIGSTOP
)。
除此之外,试试这个:
#!/bin/bash
cmd cmd_args <&0 &
wait_pid=$!
trap "kill -s SIGTERM $wait_pid" SIGTERM SIGINT
wait $wait_pid
<&0
会告诉 bash 你想要 cmd
的标准输入是脚本的标准输入。
有点偏离主题,但将字节转储到正在运行的进程的标准输入中的另一种有趣方法是将它们直接发送到它的 /proc
文件描述符,如:
echo "Stuff to send to the process" >/proc/$wait_pid/fd/0
关于bash - 等待后台进程时将 stdin 重定向到 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17703192/