【发布时间】:2015-01-15 15:31:21
【问题描述】:
我当前任务的主要问题是从 Tcl 环境(使用 exec cmd)启动进程,并将 I/O 重定向到父进程 (Tcl),当父进程意外停止时,我想自动停止子进程.但是有一个警告:对于 I/O 重定向情况,子进程不会停止。问题比较复杂,因为子进程不能修改。
我找到了下一个线程 How to make child process die after parent exits?,其中找到了针对 C 语言且没有 I/O 重定向的解决方案。
例如,我在 Tcl 中使用下一个命令:
exec ping $SERVER_NAME >@ stdout 2>@ stderr
此命令将 stdout 和 stderr 的输出重定向到父进程 (Tcl)。 但我需要运行类似的东西:
exec sh -c "set -o monitor; ping $SERVER_NAME >@ stdout 2>@ & read dummy; kill %1"
在上面的命令中,stdout 和 stderr 的输出进入“sh”进程,但我想在我的父进程中得到它。所以我有几个问题:
- 以下命令中的符号“@”是什么意思(也许您可以获得链接)?
- 如何将 I/O 重定向到 Tcl 进程?
- 如果 Tcl 进程意外停止,如何停止子进程(例如 ping)?
【问题讨论】: