Запуск дочернего процесса в последовательном операторе перед выходом из родительского процесса? - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь написать скрипт Bash, который, когда получает сигнал SIGINT, создает свою копию перед выходом.Таким образом, когда пользователь пытается уничтожить этот сценарий с помощью сигнала SIGINT, копия процесса появляется снова.

trap "echo Exiting...?; ./ghoul.sh; exit 1" SIGINT 

while : 
    do
    echo Process Number $$, with PPID $PPID!
    sleep 1
done

Однако всякий раз, когда я приостанавливаю процесс и проверяю ps -f, происходит несколько процессов сценария.(дети и дети детей).Команда выхода, кажется, никогда не запускается, так как ожидает выхода детей.Я хочу найти способ запустить сценарий в операторе trap и завершить работу, сохраняя полученный дочерний процесс.Есть ли способ сделать это, кроме создания ребенка в качестве фонового процесса?

1 Ответ

0 голосов
/ 26 июня 2018

Я считаю, что гораздо проще поместить код выхода в функцию.Например, ваш эхо без кавычек содержит только ?, который является символом glob (расширение файла).Чтобы родитель не убил ребенка, вы можете использовать disown, и да, вам нужно запустить его в фоновом режиме.

Попробуйте:

f_exit() {
    echo 'Exiting...?'
    ./ghoul.sh &
    disown -h %1
    exit 1
}
trap "f_exit" SIGINT

while :
    do
    echo "Process Number $$, with PPID $PPID!"
    sleep 1
done
...