tcl中有没有一种方法可以将tcl进程替换为命令进程?

时间:2018-12-07 21:48:20

标签: tcl

我想做与execsh中的execve(2)等效,只是将控制权从tcl转移到被调用的命令,而永不返回,这样任何信号都会发送到过去是tcl进程直接转到被调用的命令,被调用命令的stdout是曾经是tcl进程的stdout,等等。

我在手册中环顾四周,但是在tcl中没有找到一种明显的方法。

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

1 个答案:

答案 0 :(得分:3)

目前Tcl本身还没有内置任何功能,但是TclX extension包含一个命令execl,它可以完全满足您的要求。

package require TclX

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

请注意,execl操作失败可能会使进程处于不一致状态,因为某些库使用挂钩来检测基础系统调用并关闭其资源。当然,这完全取决于您在做什么,但是由于X11库是一个明显的例子,因此,如果execl失败,Tk应用程序将无法继续当前的过程。 (fork / execl惯用语或Tcl的标准exec没问题,因为问题是系统调用总是在子进程中发生。)