Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在tcl中有没有一种方法可以用命令的进程替换tcl进程?_Tcl - Fatal编程技术网

在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
)吗?