我当前任务的主要问题是从Tcl环境(使用exec cmd。)和I/O重定向到父进程(Tcl)启动进程,并且父进程意外停止时,我想自动停止子进程。但是有一个警告:对于I/O重定向的情况,子进程不会停止。这个问题很复杂,因为子进程无法修改。Bash I/O重定向
我找到了下一个线程How to make child process die after parent exits?,发现了C语言和没有I/O重定向的解决方案。
因此,例如,在我的Tcl使用下一个命令:输出和错误的
exec ping $SERVER_NAME >@ stdout 2>@ stderr
该命令重定向输出到父进程(TCL)。 但我需要运行类似的东西:
exec sh -c "set -o monitor; ping $SERVER_NAME >@ stdout 2>@ & read dummy; kill %1"
而且在上述输出和错误的输出命令进入“sh”的过程,但我想获得它在我的父进程。所以我有几个问题:
- 什么意思符号“@”在下面的命令(可能是你可以得到一个链接)?
- 如何使I/O重定向到Tcl进程?
- 如何停止子进程(例如ping)如果Tcl进程意外停止?
很抱歉,但 “定PID [EXEC EXEC平$ SERVER_NAME> @标准输出2> @标准错误&]” 不工作:错误:无法执行 “执行”:没有这样的文件或目录 – Alexei 2015-01-15 16:09:42
@Alexei:尝试删除“执行”之一。 – 2015-01-15 17:12:25
@Hoodiecrow:叶,我已经尝试过,但在这种情况下,pid变量将不会被设置,因为当我停止父进程子继续工作和exec没有返回,所以没有设置PID。我不知道这个命令可能还有其他一些错误吗? – Alexei 2015-01-15 18:42:47