将信号转发给子进程
我有一个 shell 脚本,它启动到远程主机的 ssh 会话,并将输出通过管道传输到另一个本地脚本,如下所示:
#!/bin/sh
ssh user@host 'while true ; do get-info ; sleep 1 ; done' | awk -f parse-info.awk
它工作正常。我在 djb 的 daemontools 的“监督”程序下运行它。唯一的问题是关闭守护进程。如果我终止此 shell 脚本的进程,ssh 和 awk 进程将继续作为孤立进程运行。通常我会用 exec 来替换监督 shell 进程来解决这个问题,但这两个进程在自己的子 shell 中运行,无法替换 shell 进程。
我想做的是让监督 shell 脚本将它收到的任何信号“转发”到至少一个子进程,这样我就可以打破管道并干净地关闭。有没有简单的方法可以做到这一点?
I have a shell script that starts an ssh session to a remote host and pipes the output to another, local script, like so:
#!/bin/sh
ssh user@host 'while true ; do get-info ; sleep 1 ; done' | awk -f parse-info.awk
It works fine. I run it under the 'supervise' program from djb's daemontools. The only problem is shutting down the daemon. If I terminate the process for this shell script, the ssh and awk processes continue running as orphans. Normally I would solve this problem with exec
to replace the supervising shell process, but the two processes run in their own subshells and can't replace the shell process.
What I would like to do is have the supervising shell script 'forward' any signals it receives to at least one of the child processes, so that I can break the pipe and shut down cleanly. Is there an easy way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
进程间通信。
你应该看看管道等。
Inter process communications.
You should be looking at pipes, etc.