Завершить фоновое задание и его дочерние элементы при выходе - PullRequest
2 голосов
/ 04 августа 2020

Основной скрипт имеет фоновую задачу, выполняющую test1. sh, я пытаюсь остановить фоновую задачу, когда основная задача также завершается

#!/bin/sh

# background process

./test1.sh &

# do while starts

x=1
while [ $x -le 30 ]
do
  echo "Welcome $x times "
  x=$(( $x + 1 ))
  sleep 1
done

exit

Файл ./test1.sh содержит

#!/bin/sh

while true
do
    echo "copying "
    cp logs.txt /tmp
    sleep 10
done

Или любой лучший подход для запуска фоновой задачи в отдельном потоке копирования файлов и выхода после завершения основной задачи

Ответы [ 2 ]

4 голосов
/ 04 августа 2020

Временно включить управление заданием, чтобы поместить фоновое задание в отдельную группу процессов, и установить ловушку EXIT в основной оболочке для широковещательной передачи сигнала TERM фоновому заданию и его дочерним элементам при выходе.

#!/bin/sh
set -m
./test1.sh &
set +m

trap "kill -- -$!" EXIT

# rest of the program
0 голосов
/ 04 августа 2020

Доступ к PID фонового процесса можно получить, назначив его переменной с помощью $! а потом позвонить позже. См. Ниже:

#!/bin/sh

# background process

./test1.sh &

# set $test1_pid to the PID of ./test1.sh & (Presumed BG [1])
test1_pid=$!

# do while starts

x=1
while [ $x -le 30 ]
do
  echo "Welcome $x times "
  x=$(( $x + 1 ))
  sleep 1
done

# Terminate BG process
kill $test1_pid

exit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...