Как остановить бесконечный запущенный процесс (ztail), запущенный сеансом ssh после закрытия этого сеанса

У меня есть своеобразная проблема. Мой сервер поддерживает несколько сеансов ssh одновременно, поэтому несколько администраторов могут управлять (через интерфейс командной строки) одновременно. У нас есть команда, которая вызывает ztail для отображения сжатых файлов журнала. Теперь, когда текущая сессия ssh закрыта (без нажатия Ctrl- C , чтобы остановить команду ztail ), эта команда должна в идеале прекратить работу. Но то, что я наблюдал при запуске новой сессии ssh, процесс ( ztail ) по-прежнему работает в фоновом режиме и потребляет мой процессор, хотя предыдущий сеанс был закрыт. Теперь, как я могу узнать, когда сессия была закрыта, чтобы я мог использовать эту переменную / флаг для закрытия / остановки любых команд, инициированных ранее закрытым сеансом?

Это происходит только в том случае, если вы запускаете ztail (или любую другую команду) в качестве нового процесса на корневом уровне (т.е. без родительского процесса), например, в фоновом режиме или через cron.

Обычно, когда вы запускаете стандартный сеанс ssh вы получаете процесс оболочки, который является корневым процессом для всех запущенных вами программ. Если сеанс ssh завершается, ядро ​​также уничтожает все дочерние процессы. (Вот почему люди обычно используют screen или сопоставимые вещи для сохранения сеансов.)

Поэтому проще всего использовать это поведение по умолчанию. Посмотрите на ps axjf чтобы проверить, что ztail с корневым процессом ztail , затем ztail , почему он переживает завершенную сессию ssh .

Во время ssh-сеанса shell-session будет дочерним процессом. Этот дочерний процесс будет иметь еще один дочерний процесс: ztail . После закрытия оболочки ztail потеряет своих родителей. Как и во всех этих процессах, они будут использоваться init с PID 1.

Если родительский pid ztail равен 1, это, скорее всего, один из ваших «зомби».