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

标签 bash

我有以下代码:

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/

相关文章:

linux - 从 linux shell 脚本中的文件中删除 grep 搜索内容

mysql - 从 CSV 文件获取特定输入的 B 树

bash - * 在别名中是如何解释的?

Bash脚本查找两个字符串之间的差异

bash - Git日志,从另一个命令输入

linux - 使用 $1 在 bash 脚本中使用 awk 提取一些文本

c++ - Qt toBase64 和 Linux base64 的区别

linux - 是否可以在 linux 中显示排序的进度?

linux - 使用 awk 或 sed 的特定数据格式化

bash - 如何在其他目录中扩展 bash 补全?