2

我有以下代码:

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

但没有任何运气。

4

1 回答 1

2

如前所述,您不能捕获SIGKILL(或SIGSTOP)。

除此之外,试试这个:

#!/bin/bash
cmd cmd_args <&0 &
wait_pid=$!
trap "kill -s SIGTERM $wait_pid" SIGTERM SIGINT
wait $wait_pid

<&0告诉 bash 您希望cmd's stdin 成为脚本的标准输入。

有点跑题了,但是另一种将字节转储到正在运行的进程的标准输入的有趣方法是将它们直接发送到它的/proc文件描述符,如下所示:

echo "Stuff to send to the process" >/proc/$wait_pid/fd/0
于 2013-07-17T15:35:08.650 回答