在spawn之后如何在expect shell脚本中获取子进程pid

时间:2012-02-13 12:36:08

标签: shell expect spawn

脚本的一部分 a.exp

#!/usr/bin/expect
# ..... 
spawn ssh -qTfnN -D $port $user@$host
expect "*assword:*"
# .....

如何获得子进程“ssh”的 pid

如果我在bash shell中执行这些操作,而不是在脚本文件中执行,则结果为

expect1.1> spawn ssh name@host
spawn ssh name@host
2188
expect1.2> 

2188 是子流程pid。

如何在expect shell中使用 exp_pid 命令?

2 个答案:

答案 0 :(得分:6)

我认为您正在寻找的是这样的:

spawn ssh name@host
set pid [exp_pid]
puts "PID: $pid"

答案 1 :(得分:2)

This man page说:

  

spawn返回UNIX进程ID。如果没有产生任何进程,则返回0。

即您可以这样做:

set pid [spawn ssh -qTfnN -D $port $user@$host]

您也可以将exp_pid用作jcollado demonstrated。相同的手册页说明:

  

exp_pid [-i spawn_id]
  返回与当前生成的进程相对应的进程ID。如果使用-i标志,则返回的pid对应于给定的生成ID。