1

Я запускаю сценарий с одного компьютера на другом компьютере, используя SSH.

ssh <host> a.pl

Теперь a.pl запускает несколько других экземпляров a.pl, используя метод 'system', и выполняет каждый из них в фоновом режиме. Я интегрировал это с LDAP, и когда один из экземпляров умирает, основной сценарий a.pl узнает об этом, так как постоянно отслеживает их. Следовательно, при обнаружении того, что один из экземпляров умер, основной скрипт тоже умирает, а остальные экземпляры затем принадлежат init (1).

Я ожидаю, что ssh завершит работу, когда этот основной скрипт умрет. Но почему-то кажется, что ssh продолжает ждать всех запущенных процессов. SSH выходит, когда я убиваю оставшиеся экземпляры.

Это ожидаемое поведение? Если да, то почему это так?

1 ответ1

1

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

Внутренне, это в основном вызвано тем фактом, что ssh ожидает времени, когда выполненный процесс закроет файловые дескрипторы (stdin, stdout, stderr), которые перенаправляются клиенту. Запустив другие сценарии, они унаследуют те же дескрипторы файлов, и поэтому они не будут полностью закрыты до того, как все дочерние элементы полностью закроют их.

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