Как я могу запустить процесс в фоновом режиме и проверить, когда он заканчивается в скрипте bash? Моя идея - такой скрипт:
launch backgroundprocess &
while [ Process is running ];do
echo "PROCESS IS RUNNING\r"
done;
echo "PROCESS TERMINATED"
Ключом является команда "ждать":
#!/bin/bash
/my/process &
/another/process &
wait
echo "All processes done!"
cmd1 & p=$!; cmd2 & q=$!; while sleep 1; do echo still running ; done& wait $p $q; kill $!;
С помощью
wait
вы можете получить необходимую гранулярность:источник
Вот один из способов сделать это:
источник
wait
, больше подходит для этого?Вы можете запустить ваш процесс с помощью nohup и написать сценарий оболочки для чтения файла nohup.out, который nohup использует для входа в систему.
источник
nohup
не пишет ничегоnohup.out
; он просто создает файл и перенаправляет вывод команды в него. (2) Если команда не выдаст никакого вывода, ничего не будет записаноnohup.out
, и эта идея быстро никуда не денется. (3) Даже еслиcommand
записывает вывод, как вы можете определить, когда он заканчивается, контролируя этот вывод?lsof
чтобы увидеть,nohup
все еще используетnohup.out
, но я согласен, что это очень волосатый метод.command
начинает работать,nohup
ушел. (1) Да, я повторяю число, потому что я повторяю то, что сказал два года назад:nohup
ничего не пишетnohup.out
. (5) Да, вы можете написать сценарий оболочки для цикла и запуска,lsof
чтобы увидеть,nohup.out
открыт ли он. Но это был бы другой ответ. (6) Даже если бы вы сделали это, это было бы ненадежно. Что, если какой-то другой процесс открылnohup.out
файл? Вы действительно хотели бы проверить, был ли этот конкретный процессnohup.out
открыт. (7) Но, если вы собираетесь это сделать, почему бы просто не проверить, запущен ли процесс?