Что происходит после выключения ПК через подпроцесс? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь выключить компьютер и перезапустить его в локальной сети.

При получении одной из команд (выключение или перезапуск) я выполняю одно из следующих действий:

subprocess.call(["shutdown", "-f", "-s", "-y"]) # Turn off

subprocess.call(["shutdown", "-f", "-r", "-t", "-c", "-y"]) # Restart

Iхотел бы сообщить другой стороне, если процесс был успешно инициирован, и если ПК находится в желаемом состоянии.

Я знаю, что можно реализовать функцию, которая будет проверять, жив ли ПК (это довольно хорошая идея) через несколько секунд после выполнения команд, но как узнать, сколько секунд нужно?А что если компьютер будет выключен через мгновение после отправки сообщения о том, что он все еще жив?

Мне любопытно узнать, что на самом деле происходит после выполнения этих команд?Будет ли скрипт работать до тех пор, пока диспетчер задач его не уничтожит?Остановится ли он сразу после команды?

1 Ответ

1 голос
/ 27 апреля 2019

Программы типа shutdown просто отправляют сообщение на init (или любую другую современную замену) и немедленно завершают работу;это зависит от того, что будет дальше.Типичное поведение Unix - сначала отключить такие вещи, как серверы SSH (что, вероятно, не прерывает ваше соединение с машиной), затем отправить SIGTERM всем процессам, подождать несколько секунд (обычно 5) для запуска обработчиков сигналов, а затемотправить SIGKILL любому выжившему.Наконец, файловые системы отключаются, и происходит аппаратная остановка или перезагрузка.

Хотя нет гарантии, что первый этап займет достаточно много времени, чтобы вы могли сообщить об успешном выполнении shutdown, обычно это происходит;если это проблема, вы можете поймать SIGTERM, чтобы купить себе эти несколько дополнительных секунд, чтобы донести сообщение.

...