Я реализую простую систему для удаленного запуска заданий через SSH. Моя цель — запустить задание в screen
и записать все его выходные данные, используя script
и загрузить скрипт на сервер, когда задание завершится. Однако я борюсь с правильной обработкой SIGTERM (например, когда удаленная машина собирается выключиться), поскольку процесс script
не завершается при получении SIGTERM (вместо этого процесс, который выполняется внутри, script
становится зомби).
Предположим, что выполнена следующая команда:
script -e -q -c 'ping www.google.com'
Использование killall -TERM script
для отправки сигнала SIGTERM процессу, script
по-видимому, передает сигнал SIGTERM ping
(который завершается), однако он становится процессом-зомби и script
не завершается:
> ps -aux | grep ping
karel 16460 0.0 0.0 10852 2732 pts/2 S+ 12:57 0:00 script -e -q -c ping www.google.com
karel 16461 0.1 0.0 0 0 ? Zs 12:57 0:00 [ping] <defunct>
Если я правильно понимаю, процесс ping
является зомби, потому что родительский script
процесс все еще наблюдает за ним. Однако возможно ли сделать так, чтобы он script
прекратил наблюдение за процессом и изящно завершился (при этом сбрасывая typescript)?