在等待后台进程时将stdin重定向到stdout

时间:2013-07-17 14:55:14

标签: bash

我有以下代码:

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

但没有任何运气。

1 个答案:

答案 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