Отвечая на этот вопрос после продолжительной дискуссии с коллегой, мне бы очень хотелось получить разъяснение.
Я запускаю фоновый процесс, добавляя « &
» в командную строку или останавливая его CTRL-Z
и возобновляя в фоновом режиме с помощью « bg
». Тогда я выхожу.
Что случилось?
Мы были совершенно уверены, что он должен был быть убит SIGHUP, но этого не произошло; после повторного входа в систему этот процесс был успешно запущен и pstree
показал, что он был «принят» init
.
Это ожидаемое поведение?
Но тогда, если это так, какова nohup
цель команды? Похоже, что процесс все равно не будет убит, с ним или без него ...
Редактировать 1
Еще несколько деталей:
- Команда была запущена из сеанса SSH, а не из физической консоли.
- Команда была запущена без
nohup
и / или&
; затем оно было приостановленоCTRL-Z
и возобновлено в фоновом режимеbg
. - Сеанс ssh не сбрасывался. Был фактический выход из системы (
exit
команда " "). - Процесс был
scp
операцией копирования файла. - При повторном входе в систему
pstree
показано, что процесс запущен и является дочернимinit
.
Редактировать 2
Чтобы сформулировать вопрос более четко: будет ли процесс, находящийся в фоновом режиме (с помощью &
или bg
), заставить его игнорировать SIGHUP
, как это nohup
делает команда?
Редактировать 3
Я попытался вручную посылая SIGHUP
к scp
: он вышел, так что это определенно не игнорировать сигнал.
Затем я попытался снова запустить его, поставить его в фоновом режиме и выйти из системы: он был «принят» init
и продолжал работать, и я нашел его там при повторном входе.
Я сейчас озадачен. Похоже, что не SIGHUP
было отправлено вообще при выходе из системы.
1>/dev/null 2>&1
для bash и т. Д.