我对 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 ,你可以对 的输出进行一些魔法:vi
MAIN_PID
gnome-terminal
gnome_terminal
pstree
pstree -p $MAIN_PID | grep -o 'vim([0-9]*) | grep -o '[0-9]*'
要检查进程是否仍然存在,可以使用kill -0
which 不会发送任何信号,如果进程存在,则返回退出代码 0,如果不存在,则返回退出代码 1。