tcl中有没有办法用命令的进程替换tcl进程?

Is there a way in tcl to replace the tcl process with the process of a command?

我想在 shexecve(2) 中做相当于 exec 的操作,只是将控制权从 tcl 转移到调用的命令而不是 return,所以发送到曾经是 tcl 进程的任何信号都直接发送到被调用命令,被调用命令的标准输出是曾经是 tcl 进程的标准输出,等等

我查阅了手册,但没有找到在 tcl 中执行此操作的明显方法。

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

目前 Tcl 本身没有内置任何东西,但 TclX extension includes a command, execl 可以完全满足您的需求。

package require TclX

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

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