首页 > 解决方案 > 无法在 bash 中一次终止同时运行的脚本

问题描述

我正在尝试同时运行 2 个文件,即一个名为PaperCapture.py的 python 脚本和一个 bash 脚本PrinterAutomation.sh,因为我的任务要求它们同时启动。python 脚本用于使用相机点击图片,bash 脚本用于向打印机发送回显信号,以便打印某些内容并馈送纸张。

我编写了另一个名为ScriptStart.sh的 bash 脚本,它可以同时启动这两个脚本,但是当我按下Ctrl + C,甚至尝试终止进程时,PrinterAutomation.sh 脚本继续在后台运行,即使终端已经关闭。

ScriptStart.sh 的代码如下:

#!/bin/bash

#=============================================================================
# INITIAL SCRIPT FOR STARTING CAMERA & PRINTER SCRIPTS
#=============================================================================

python3 PaperCapture.py &  PIDIOS=$!
sudo sh ./PrinterAutomation.sh &  PIDMIX=$!
wait $PIDIOS

PID=pidof ./PrinterAutomation.sh
echo $PID
kill -INT $PID

如果有人可以帮助我解决这个问题,那就太好了。我所需要的只是让两个脚本同时启动,并在 PaperCapture.py 停止运行时让 PrinterAutomation.sh 停止运行。

========================================

更新:

删除 pidof 并使用 sudo kill -INT "$PIDMIX" 会终止终端前台中的脚本,但 PrinterAutomation.sh 仍会在后台继续运行。

这是通过添加行修复的

trap "kill 0" EXIT

在顶部

标签: bashubuntush

解决方案


您无权杀死不属于您的进程。尝试

sudo kill -INT "$PIDMIX"

并且可能摆脱了对pidof(无论如何也有语法错误)的无意义且有些容易出错的额外调用;您可能的意思是

PID=$(pidof ./PrinterAutomation.sh)

甚至更好的是,您的私有变量更喜欢小写。)


推荐阅读