gpt4 book ai didi

bash - 如何在 bash 中运行两个进程,就好像它们是一个进程一样?

转载 作者:行者123 更新时间:2023-11-29 09:10:47 25 4
gpt4 key购买 nike

我有两个命令 foo 和 bar。

foo 在没有 stdin 或 stdout/stderr 事件的情况下运行了很长时间。 bar 是 foo 的客户端,使用 stdout/stderr 运行,但没有 stdin 事件。

我想从一个 shell 运行它们,能够用 ctrl-c 杀死它们,并在发生时查看 bar 的输出。

即像这样的序列

富&酒吧 kill -9

但无需手动执行 kill - 相反它只是发生在 ctrl-c 上

有没有办法编写脚本?

谢谢

最佳答案

不要使用kill -9

您想在 EXIT 上捕获,而不是在 INT 上捕获。

trap 'kill $fooPid $barPid' EXIT
foo & fooPid=$!
bar & barPid=$!
wait

此解决方案将始终确保终止 foobar,无论它退出的原因是什么(不包括它被 SIGKILL 编辑) .

如果你想避免保留 PID(它有一些竞争条件问题),你可以这样做:

trap 'kill $(jobs -p)' EXIT
foo &
bar &
wait

如果您的脚本没有其他作业,那是更好(也更干净!)的解决方案。

注意:这些解决方案意味着 foobar 可以写入您的终端(您脚本的 stdout),但都不能从 stdin 读取>。如果您需要 foobar 从 stdin 读取,解决方案会变得有点复杂。

关于bash - 如何在 bash 中运行两个进程,就好像它们是一个进程一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/709793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com