Невозможно завершить одновременно запущенные сценарии одновременно в bash - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь запустить 2 файла, а именно сценарий python с именем PaperCapture.py и сценарий bash PrinterAutomation. sh одновременно, так как моя задача требует, чтобы они начали одновременно. Сценарий python используется для щелчка по снимкам с помощью камеры, а сценарий bash используется для отправки эхо-сигнала на принтер, чтобы что-то напечатать и передать бумагу.

Я написал другой сценарий bash с именем ScriptStart. sh, который может запускать оба этих сценария одновременно, но когда я нажимаю 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

Если кто-то может помочь мне, чтобы понять это, было бы здорово. Все, что мне нужно, - это чтобы оба сценария запускались одновременно, и для PrinterAutomation. sh для остановки работы, когда PaperCapture.py прекратил работу.

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

ОБНОВЛЕНИЕ:

Удаление pidof и использование sudo kill -INT "$ PIDMIX" завершает выполнение сценариев на переднем плане терминала, но PrinterAutomation. sh все еще продолжает работать в фоновом режиме.

Это было исправлено добавлением строки

trap "kill 0" EXIT

вверху

1 Ответ

1 голос
/ 18 февраля 2020

У вас нет разрешения убивать процесс, который не ваш. Попробуйте

sudo kill -INT "$PIDMIX"

и, возможно, избавитесь от бессмысленного и несколько подверженного ошибкам дополнительного вызова pidof (который также в любом случае имеет синтаксическую ошибку; вы, вероятно, имели в виду

PID=$(pidof ./PrinterAutomation.sh)

или еще лучше, предпочитайте строчные буквы для ваших личных переменных.)

...