在tcl中有没有一种方法可以用命令的进程替换tcl进程?
我想在在tcl中有没有一种方法可以用命令的进程替换tcl进程?,tcl,Tcl,我想在sh或execve(2)中执行与exec相当的操作,只需将控制权从tcl转移到被调用的命令,并且永不返回,这样发送到以前是tcl进程的任何信号都会直接发送到被调用的命令,被调用命令的stdout就是以前是tcl进程的stdout,等等 我已经查阅了手册,但还没有在tcl中找到一个明显的方法来实现这一点 我不是说tcl的exec,它让tcl保持运行,创建子流程并捕获其输出,然后恢复tcl流程中的控制流。目前tcl本身没有内置任何东西,但包含一个命令,它可以完全按照您的要求执行 package
sh
或execve(2)
中执行与exec
相当的操作,只需将控制权从tcl转移到被调用的命令,并且永不返回,这样发送到以前是tcl进程的任何信号都会直接发送到被调用的命令,被调用命令的stdout就是以前是tcl进程的stdout,等等
我已经查阅了手册,但还没有在tcl中找到一个明显的方法来实现这一点
我不是说tcl的
exec
,它让tcl保持运行,创建子流程并捕获其输出,然后恢复tcl流程中的控制流。目前tcl本身没有内置任何东西,但包含一个命令,它可以完全按照您的要求执行
package require TclX
execl /bin/bash [list -c somescript.sh]
请注意,执行失败的
execl
可能会使进程处于不一致的状态,因为有些库使用钩子来检测底层系统调用并关闭其资源。当然,这完全取决于您正在做什么,但由于X11库就是一个显著的例子,因此如果execl
失败,则Tk应用程序继续当前进程是不安全的。(fork/execl
习惯用法-或Tcl的标准exec
-没有问题,因为问题系统调用总是发生在子进程中。)如果我想做一些特定于系统的事情(例如,特定于unix)我可能只需要编写一个小的扩展来完成所有的低级系统编程,以使其顺利实现。“将控制权转移到一个被调用的命令”我想你的意思是转移到一个可执行文件,而不是Tcl命令。因为我不能建议一个单字符修改的编辑,所以我要发表评论。您的意思是软件包需要代码中的Tclx
(小写x
)吗?