linux - 使用 BASH 在不同的盒子上启动多个进程

标签 linux bash ssh process

我的脚本如下:

#!/bin/bash

myProgram1&
pidMyProgram1=$!

ssh myUserName@pluto
myProgram2&
pidMyProgram2=$!

function cleanup
{
   kill -9 $pidMyProgram1 $pidMyProgram2
   exit 0
}

trap cleanup SIGINT SIGTERM

while :
do
   sleep 1
done

它没有像我需要的那样工作。我正在尝试启动两个进程,一个在另一个名为 pluto 的盒子上。我希望这两个进程无限期地运行,直到我按下 control+c,然后我希望这两个进程都停止。当我运行它时,我最终通过 ssh 进入 pluto,但我的进程甚至没有运行。关于如何处理在单独的盒子上启动流程的要求,有什么想法吗?我对 BASH 很陌生......

最佳答案

ssh myUserName@pluto 在远程机器上启动一个 shell,并且在该 shell 退出之前不会退出。它不会导致脚本的其余部分在远程计算机上执行。您只需要将 myProgram2 作为参数传递给 ssh;该程序必须存在于远程机器上,而不仅仅是在本地机器上。

myProgram1 & pidMyProgram1=$!

ssh myUserName@pluto myProgram2 & pidMyProgram2=$!

function cleanup
{
   kill $pidMyProgram1 $pidMyProgram2
   exit 0
}

trap cleanup SIGINT SIGTERM

while :
do
   sleep 1
done

假设 myProgram1 将一直运行直到被中断,您可以将繁忙的 while 循环替换为

wait $pidMyProgram1

关于linux - 使用 BASH 在不同的盒子上启动多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26495139/

相关文章:

linux - Chromium 自动刷新命令行

linux - 该系统上未安装 Pascal 编译器?

linux bash - 比较两个文件并删除具有相同结尾的重复行

bash - 哪个词在文本文件中最常出现?

带有 mysql 共享托管数据库的 JavaFx 本地项目

linux - 使用 perl 检查 Linux 中的目录是否存在

linux - eBPF - 无法从跟踪点 sys_enter_execve 读取 argv 和 envp

bash - 在不同文件的不同位置删除包含给定字符串的行

Bash grep 不适用于撇号

python - 有没有办法在 Robot Framework 的 ssh 连接中使用 telnet?