1

Я сталкиваюсь с довольно странной ситуацией:

  • ssh на beaglebone (подробности: uname -a = "Linux beaglebone 3.2.34 # 1 ср 21 ноя 14:17:11 CET 2012 armv7l GNU/Linux", ssh сервер: Dropbear sshd v2012.55)
  • запустить любой процесс через экран, или nohup или /etc/init.d/
  • выйти
  • повторно в него
  • заметить, что процесс больше не существует ..

При использовании второго ssh-соединения я вижу, что запущенный процесс прерывается при отключении.

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

$ shopt huponexit
huponexit       off

Мне пришлось прибегнуть к использованию команд cron, чтобы сохранить процесс

Почему отключенные процессы уничтожаются при отключении?

Видите ли вы другие вещи для поиска?

1 ответ1

0

Кажется странным, nohup не работает, но это легко можно проверить, как показано ниже:

  { sleep 999; echo $? > exitcode ; } &
  fuser -1 -k /bin/sleep
  expr $(cat exitcode) - 128

Это выведет код возврата минус 128, который является точно номером сигнала, который его убил. Вы можете перечислить их, просто выполнив:

  kill -l 

Теперь попробуйте это вместо:

  rm exitcode
  { nohup sleep 999; echo $? > exitcode; } &
  fuser -1 -k /bin/sleep
  ls -l exitcode

Если nohup работает, на этом этапе вам скажут, что такого файла нет. Вы можете перепроверить это, выполнив:

  fuser -15 -k /bin/sleep
  expr $(cat exitcode) -128

и найти это значение равным 15.

РЕДАКТИРОВАТЬ

Ваш последний комментарий был довольно показательным: это означает, что SIGHUP отправляется не процессу (в данном случае спящему режиму), а непосредственно вашей оболочке. Конечно, это может сделать только Dropberar. Небольшое исследование показало, что Dropbear действительно убивает все пользовательские процессы при выходе из системы.

Вы можете включить эту раздражающую функцию, добавив строку

 KillMode=process

в конце раздела «Сервис» в файле /lib/systemd/dropbear@.service. Затем либо перезагрузите, либо перезапустите Dropbear.

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