bash - 无法在 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
在顶部
解决方案
您无权杀死不属于您的进程。尝试
sudo kill -INT "$PIDMIX"
并且可能摆脱了对pidof
(无论如何也有语法错误)的无意义且有些容易出错的额外调用;您可能的意思是
PID=$(pidof ./PrinterAutomation.sh)
甚至更好的是,您的私有变量更喜欢小写。)
推荐阅读
- python - 简单的 Python 程序循环错误
- javascript - 如何搜索与其他单词相似的单词?
- hibernate - 用于 SpringData 连接实体过滤的 QueryDSL
- javascript - 如何用正则表达式替换不同的字符并添加条件。
- javascript - Chrome 扩展 addEventListener null
- swift - 广泛的 Swift 扩展协议
- php - mkdir 无法处理文件夹内的 php
- c# - 如何使用 BFS 在 6x6 网格迷宫 C# 中找到最短路径
- reactjs - Store.subscribe:TypeError:__webpack_require__.i(...) 不是函数
- symfony - LexikJWTAuthenticationBundle 始终通过令牌存储获取空用户