Відповіді:
Ключ - команда "чекати":
#!/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ви можете мати деталізацію вам потрібно:
sleep 1 &
PID1=$!
sleep 2 &
PID2=$!
wait $PID1
echo 'PID1 has ended.'
wait
echo 'All background processes have exited.'
Ось один із способів зробити це:
launch backgroundprocess &
PROC_ID=$!
while kill -0 "$PROC_ID" >/dev/null 2>&1; do
echo "PROCESS IS RUNNING"
done
echo "PROCESS TERMINATED"
exit 0
wait, для цього більше підходить?
Ви можете запустити свій процес за допомогою nohup та записати скрипт оболонки, щоб прочитати файл nohup.out, який nohup використовує для реєстрації.
nohup command &
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) Але якщо ви збираєтесь це робити, то чому б просто не перевірити, чи працює процес?