Выбор ответа Middle Процессы и сигналы обновлено

Почему фоновая задача умерла после выхода из SSH

Вопрос

Запустили ./import.sh & в SSH-сессии и закрыли терминал. Утром процесса нет. Почему?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: При закрытии терминала процессы сессии получили SIGHUP. При потере управляющего терминала ядро и shell рассылают SIGHUP задачам сессии, а действие по умолчанию для SIGHUP это завершение.

Варианты ответа

  1. Фоновые процессы ядро завершает не позже чем через 8 часов
  2. Процесс превысил лимит памяти сессии и был убит ночью
  3. При закрытии терминала процессы сессии получили SIGHUPправильный ответ
  4. SSH при выходе убивает все процессы сессии через SIGKILL

Разбор

При потере управляющего терминала ядро и shell рассылают SIGHUP задачам сессии, а действие по умолчанию для SIGHUP это завершение. Помогают nohup, disown, setsid, tmux или, для постоянных задач, юнит systemd. SSH не шлёт SIGKILL, ограничения на 8 часов не существует, память здесь ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.