1

Я бегу cron каждые две минуты. Из cron я запускаю другие сценарии оболочки в фоновом режиме с «&». После того, как cron завершает работу, запускается процесс сценария оболочки, это желаемое поведение.

Но приводит ли это к любому процессу зомби при выходе из дочернего скрипта. Нужно ли рассматривать какие-либо особые случаи?

1 ответ1

2

это, вероятно, будет (я должен проверить, чтобы быть уверенным), но в любом случае вы можете сохранить PID разветвленных процессов и убить их при выходе:

my_forked_process & my_forked_pid=$!

так как вы сказали "другие оболочки", я бы предположил, что есть несколько, поэтому мы должны использовать массив:

my_forked_pids=()
my_forked_process1 & my_forked_pids+=($!)
my_forked_process2 & my_forked_pids+=($!)

затем вы убиваете их вот так при выходе:

for pid in "${my_forked_pids[@]}"; do
    kill "$pid"
done

[бонус], если вы оберните предыдущую функцию, вы можете установить trap для ее запуска при выходе из скрипта независимо от момента (безопасность, когда он преждевременно убит):

trap cleanup_function 0

0 - это специальный сигнал, означающий "на выходе"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .