Parallel processing 如何在生成后对多台主机同时执行相同的expect

Parallel processing 如何在生成后对多台主机同时执行相同的expect,parallel-processing,background-process,expect,spawn,simultaneous,Parallel Processing,Background Process,Expect,Spawn,Simultaneous,我试图同时ssh到多个主机,并同时为所有主机执行相同的命令。我正在使用expect登录并自动发送命令。我在下面创建的脚本可以正常工作,但可以为每个主机逐个串行地连接和执行命令。我想让expect同时为所有主机工作,比如为每个主机创建子进程或在后台工作 有没有办法做到这一点 对于我的代码,我正在读取一个包含多个IP地址的文件,并将其传递给脚本 这是我的密码: #! /bin/expect set prompt ">" set fd [open ./hosts r] set hosts [re

我试图同时ssh到多个主机,并同时为所有主机执行相同的命令。我正在使用expect登录并自动发送命令。我在下面创建的脚本可以正常工作,但可以为每个主机逐个串行地连接和执行命令。我想让expect同时为所有主机工作,比如为每个主机创建子进程或在后台工作

有没有办法做到这一点

对于我的代码,我正在读取一个包含多个IP地址的文件,并将其传递给脚本

这是我的密码:

#! /bin/expect
set prompt ">"
set fd [open ./hosts r]
set hosts [read -nonewline $fd]
close $fd

foreach host [split $hosts "\n" ] {
        set timeout 30
        spawn ssh admin@$host
        lappend spawn_id_list $spawn_id
}
foreach id $spawn_id_list {
        set spawn_id $id
                while (1) {
                        expect {
                                "ssh:" {
                                        exit
                                }
                                "no)? " {
                                        send "yes\r"
                                }
                                "password: " {
                                        send "password\r"
                                }
                                "$prompt" {
                                        send "some commands\r"
                                        break
                                }
                                timeout {
                                        exit
                                }
                                -re . {
                                        exp_continue
                                }
                                eof {
                                        exit
                                }
                        }
                }

}

expect eof

使用Expect的
fork
怎么样

根据Expect的:

fork
创建一个新进程。新的工艺完全是原工艺的复制品 当前的预期过程。成功后,
fork
0
返回到新的 (子)进程并返回子进程的进程ID 到父进程。失败时(通常是由于缺乏 资源(例如交换空间、内存),
fork
-1
返回到 父进程,而不创建子进程

分叉进程通过
exit
命令退出,就像原始进程一样。允许分叉进程写入日志 文件夹。如果不禁用调试或登录大多数 过程、结果可能会令人困惑

一些pty实现可能会被多个读卡器和 作家,哪怕是暂时的。因此,最安全的方法是在 产卵过程。