【问题标题】:Is there a way in tcl to replace the tcl process with the process of a command?tcl 中有没有办法用命令的进程替换 tcl 进程?
【发布时间】:2018-12-08 10:54:59
【问题描述】:

我想在shexecve(2) 中做相当于exec 的操作,只是将控制权从tcl 转移到被调用的命令并且永不返回,这样任何信号都会发送到曾经的tcl 进程直接进入被调用的命令,被调用的命令的stdout就是以前tcl进程的stdout等等。

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

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

【问题讨论】:

  • 如果我想做一些系统特定的事情(即类 unix 特定的),我可能会写一个小扩展来完成所有低级系统编程,以使这一切顺利发生。通过“将控制权...转移到被调用的命令”,我认为您的意思是转移到可执行文件而不是 Tcl 命令。

标签: tcl


【解决方案1】:

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

package require TclX

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

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

【讨论】:

  • 由于我无法建议单字符更改的编辑,因此我正在发表评论。您的意思是代码中的package require Tclx(带有小写的x)吗?
猜你喜欢
  • 2010-09-17
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多