Добавление числовых суффиксов к именам тегов для различения XML-элементов

Can I safely assume my processes won't end if I don't use nohup

Нет. Если терминал зависает и у него есть интерактивная оболочка в качестве лидера сеанса, оболочка получит SIGHUP и повторно отправит его своим заданиям, которые не были отклонены.

Если оболочка завершает работу добровольно, она отправляет SIGHUP своим заданиям, если включена опция huponexit.

Если оболочка завершается добровольно и есть остановленные собственные задания, bash уничтожит их с помощью SIGTERM (не уверен, что это стандартное поведение ).

Если оболочка добровольно завершает работу и есть остановленные отмененные задания, драйвер терминала уничтожит их с помощью SIGHUP (это определенно стандарт -обязательно ).

Таким образом, вы все еще можете быть убиты с помощью SIGHUP в различных сценариях.

Тем не менее, глядя на исходный код nohup в http://src.gnu-darwin.org/src/usr.bin/nohup/nohup.c.html, он кажется более или менее выполнимым в чистой оболочке:

nohup_sh()
(
    set -e
    if [ -t 1]; then
        exec >> nohup.out || exec >> "$HOME/nohup.out"
    fi
    if [ -t 0 ]; then
        exec 0&1
    fi
    trap '' HUP #ignore SIGHUP (inheritable)
    set -m || : #to prevent SIGINT and SIGQUIT from being ignored
    #(probably not needed, but the nohup binary won't ignore them, unlike
    # & without set -m)

    command "$@" &
)

Возможно, вам не понадобятся дополнительные данные за пределами trap '' HUP, хотя задание получит SIGPIPE, если оно попытается записать на отключенный терминал (, что предотвращается перенаправлением ).

3
10.11.2017, 18:11
0 ответов

Теги

Похожие вопросы