将信号转发给子进程

发布于 2024-09-19 17:06:02 字数 434 浏览 2 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

诗酒趁年少 2024-09-26 17:06:02

进程间通信。

你应该看看管道等。

Inter process communications.

You should be looking at pipes, etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文