在多个终端中运行二进制文件的 Shell 脚本

在多个终端中运行二进制文件的 Shell 脚本

我对 shell 脚本还很陌生,但我有一些二进制文件,我想在一组不同的输入文件上循环运行。我需要它们按顺序运行:当前一个完成后重复。

我尝试在单独的终端中运行两个进程并保存 pid,但是当我去终止该进程时,看起来 pid 已更改。

#!/bin/bash
gnome-terminal -e "vi" & MAIN_PID=$!
gnome-terminal -e "gedit" & SIM_PID=$!
echo "MAIN Process ID is " $MAIN_PID
echo "SIM Process ID is " $SIM_PID
sudo kill $MAIN_PID

终端输出:

主进程 ID 为 8532
SIM 进程 ID 为 8542
# 选项“-e”已弃用,可能会在更高版本的 gnome-terminal 中删除。
# 使用“--”终止选项并将要执行的命令行放在其后。
杀死:(8532):没有这样的进程
用户:〜/桌面$ ps-A | grep vi
 第1026章00:00:01 dconf-服务器CE
 8541 分/3 00:00:00
用户:〜/桌面$ ps-A | grep gedit
 8550 分/4 00:00:00编辑器

如果有更简单的方法来开始我想要的事情,我也想知道。我计划启动这些进程并检查一些条件以了解它们何时完成,终止该进程并使用不同的输入集重复。

答案1

当你运行时,你没有捕获ingnome-terminal -e "vi" & MAIN_PID=$!的 PID ;您正在捕获该实例的 PID 。如果你想找到 拥有的进程的 PID ,你可以对 的输出进行一些魔法:viMAIN_PIDgnome-terminalgnome_terminalpstree

pstree -p $MAIN_PID | grep -o 'vim([0-9]*) | grep -o '[0-9]*'

要检查进程是否仍然存在,可以使用kill -0which 不会发送任何信号,如果进程存在,则返回退出代码 0,如果不存在,则返回退出代码 1。

相关内容