tcl中有没有一种方法可以用命令的进程替换tcl进程



我想在shexecve(2)中执行相当于exec的操作,只需将控制权从tcl转移到被调用的命令,然后再也不返回,这样发送到曾经是tcl进程的任何信号都会直接发送到被调用命令,被调用命令的stdout就是曾经是tcl进程的stdout,等等。

我查阅了手册,但还没有找到在tcl中实现这一点的明显方法。

我不是在谈论tcl的exec,它使tcl保持运行,创建一个子流程并捕获其输出,然后恢复tcl流程中的控制流。

Tcl本身目前没有任何内置内容,但TclX扩展包含一个命令execl,它可以完全执行您想要的操作。

package require TclX
execl /bin/bash [list -c somescript.sh]

请注意,执行失败的execl可能会使进程处于不一致的状态,因为一些库使用钩子来检测底层系统调用并关闭其资源。当然,这完全取决于你在做什么,但由于X11库就是一个值得注意的例子,如果execl失败,Tk应用程序继续当前进程是不安全的。(fork/execl习惯用法——或者Tcl的标准exec——没有问题,因为问题系统调用总是发生在子流程中。(

最新更新