В проекте я работаю, есть некоторый код, который запускает длительный процесс с использованием sudo
:Убийства подпроцесс началось через Суд
subprocess.Popen(['sudo', '/usr/bin/somecommand', ...])
Я хотел бы, чтобы очистить этот процесс, когда родитель выходы. В настоящее время подпроцесс продолжает работать, когда родительский выход (конечно, подключен к init
).
Я не уверен в лучшем решении этой проблемы. Код ограничивается только запуском определенных команд через sudo, а предоставление полных полномочий для запуска sudo kill
будет в лучшем случае отрывочным.
У меня нет открытой трубы для дочернего процесса, который я могу закрыть (дочерний процесс не читается из stdin), и я не могу изменить код дочернего процесса.
Есть ли какие-либо другие механизмы, которые могут работать в этой ситуации?
Хороший вопрос.Я не думаю, что вы можете убить процесс, который больше не принадлежит пользователю. Я полагаю, из вашего примера, что вы настроили '/ etc/sudoers', чтобы разрешить запуск программы с sudo без пароля. Рассматривали ли вы то же самое для 'killall/usr/bin/somecommand'? – goncalopp