如何运行两个进程,好像它们是bash中的一个?
发布时间:2020-12-15 21:36:39 所属栏目:安全 来源:网络整理
导读:我有两个命令foo和bar. foo运行很长时间没有stdin或stdout / stderr活动. bar是foo的客户端,使用stdout / stderr运行,但没有stdin活动. 我想从一个shell运行它们,能够使用ctrl-c杀死它们,并在发生时查看bar的输出. 即类似这样的序列 foo 酒吧 杀了-9 但不必
我有两个命令foo和bar.
foo运行很长时间没有stdin或stdout / stderr活动. bar是foo的客户端,使用stdout / stderr运行,但没有stdin活动. 我想从一个shell运行它们,能够使用ctrl-c杀死它们,并在发生时查看bar的输出. 即类似这样的序列 foo& 但不必手动执行kill – 相反它只是在ctrl-c上发生 有没有一种编写脚本的方法? 谢谢 解决方法
不要使用kill -9.
你想陷阱EXIT,而不是INT. trap 'kill $fooPid $barPid' EXIT foo & fooPid=$! bar & barPid=$! wait 这个解决方案将始终确保终止foo和bar,无论它退出的原因(不包括它是SIGKILL). 如果你想避免保留PID(有一些竞争条件问题),你可以这样做: trap 'kill $(jobs -p)' EXIT foo & bar & wait 如果你的脚本没有其他工作,这是一个更好(更清洁!)的解决方案. PS:这些解决方案意味着foo和bar可以写入您的终端(您的脚本的标准输出),但两者都无法读取标准输入.如果你需要foo或bar来从stdin读取,解决方案会变得有点复杂. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |