The*_*bhi 0 parallel-processing multithreading tcl spawn
我从tcl脚本中生成了多个sh(sipp)脚本.我想知道这些脚本将并行运行还是作为子进程运行?因为我想并行运行它.
如果我使用线程扩展,那么我是否需要使用任何其他包?
提前致谢.
Tcl可以很容易地并行运行多个子进程.这样做的方式取决于您希望如何处理这些子进程的操作.(Bourne shell - sh - 脚本作为子进程工作得很好.)这些都不需要线程.您也可以使用线程,但它们不仅仅是运行子进程所必需的,因为从Tcl的角度来看,至少从子进程处理是一个纯粹的I/O绑定问题.
有关更多详细信息,请缩小(在另一个问题中)您要执行的子进程处理类型.
如果您根本不关心跟踪子进程,只需将其&作为最后一个单词设置为后台exec:
exec /bin/sh myscript.sh &
Run Code Online (Sandbox Code Playgroud)
要与子进程保持联系,您需要open一个管道(并使用这个奇怪的节来执行此操作;将参数放在列表中,|并在前面连接):
set thePipe [open |[list /bin/sh myscript.sh]]
Run Code Online (Sandbox Code Playgroud)
然后,您可以read/ gets从管道得到的输出(是的,它支持fileevent和异步I/O在所有平台).如果你想写入管道(即,到子进程的stdin)打开模式w,并读取和写入,使用模式r+或w+(无关紧要,因为它是管道而不是文件).请注意,你必须要小心管道; 你可能会陷入困境或高度困惑.我建议使用异步I/O样式,fconfigure $thePipe -blocking 0但这与I/O处理的同步样式有很大不同.
您还可以使用Expect扩展来同时处理多个生成的子进程.为此,您必须将每个id中的id保存spawn在自己的变量中,然后将该id传递给该选项expect并send使用该-i选项.你可能想用expect_background.
set theId [spawn /bin/sh myscript.sh]
expect_background {
-i $theId
"password:" {
send -i $theId "$mypass\r"
# Etc.
}
}
# Note that [expect_background] doesn't support 'timeout'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2117 次 |
| 最近记录: |