2

У меня есть свой script.sh и я хочу запустить его с ./script.sh или ./script.sh --daemon , оставив его на переднем плане, если не указан флаг --daemon, и в этом случае он должен отсоединиться и перейти на задний план соответственно. Я хочу, чтобы скрипт выглядел как

[function definitions]

process_args

if [ "$BECOME_DAEMON" == "1" ]; then
    become_daemon
fi

while true; do
    read line <controller_fifo
    do_command $line
done

Можно ли получить поведение, которое я хочу? Если это так, что мне нужно заполнить для становления стать_демоном? Если нет, то какой будет лучшая альтернатива?

1 ответ1

2

Я нашел следующее, чтобы работать:

[function definitions]

process_args

function command_loop {
    trap handle_term SIGTERM

    while true; do
        read line <controller_fifo && do_command $line &
        wait
    done
}

if [ "$BECOME_DAEMON" == "1" ]; then
    command_loop &> /dev/null &
    disown
else
    command_loop 
fi

Обратите внимание, что этот метод обрабатывает сигнал SIGTERM изящно в обоих случаях (демон или не демон), в то время как исходный цикл чтения, который я разместил, не будет обрабатывать сигнал (обработчик сигнала не будет вызываться до тех пор, пока не будет выполнена другая строка чтения).

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