python отправляет Ctrl-C на терминал в Mac

#python #sigint #sigterm

#python #sigint #sigterm

Вопрос:

Мне удалось запустить VPN с помощью этого кода

 tunnel_file = "sudo /opt/local/sbin/openvpn2 primary_config.ovpn"

VPNProcess = subprocess.Popen(tunnel_file,shell = True)
  

Проблема в том, что я не могу остановить этот процесс
Я пытался —

 VPNProcess.send_signal(signal.SIGINT)
  

а также отправляет SIGTERM или SIGKILL, но ни один из них не работает. Даже VPNProcess.terminate() не работает.
Я могу перечислить процессы, кажется, запущены два, процесс sudo и процесс openvpn 2, но если я попытаюсь завершить их в терминале с помощью номера завершения, я получаю ответ «операция не разрешена»
Есть идеи?

Комментарии:

1. Попробуйте это с shell=False .

2. Вы не можете остановить sudo процесс, потому что это setuid, и вы не можете остановить openvpn2 процесс, потому что он запущен от имени другого пользователя (root). Вероятно, вам следует создать новый псевдотерминал (pty) для запуска sudo в; затем вы можете отправить Ctrl-C на pty.