Показать статистику
0 голосов
от (160 баллов)

Знатоки, подскажите, как одной командой закрыть процессы и выключить систему?

killall -u user & shutdown -h now не работает, после того как закрываются процессы,  комп не выключается.

Спасибо

202 просмотров 1 ответов

1 Ответ

+1 голос
от (17.4тыс. баллов)

Возможно, система ждет завершения процессов перед выключением. Попробуйте следующую команду, чтобы сначала принудительно завершить все процессы пользователя, а затем выключить систему:

( killall -u user -w ; shutdown -h now ) &

Эта команда запускает подпроцесс, в котором сначала выполняется killall -u user -w, где флаг -w означает, что команда будет ожидать завершения всех процессов, прежде чем переходить к следующей команде. После завершения всех процессов выполняется shutdown -h now, который выключает систему.

от (17.4тыс. баллов)
+1

Команда ( killall -u user -w ; shutdown -h now ) & выполняет следующие шаги:

  1. ( ... ) создает подпроцесс, где выполняются команды внутри скобок. Это позволяет выполнять команды последовательно, а не параллельно.

  2. killall -u user -w принудительно завершает все процессы, принадлежащие пользователю user. Флаг -w означает, что команда killall будет ожидать завершения всех процессов, прежде чем передавать управление следующей команде.

  3. ; разделяет команды, которые должны быть выполнены последовательно. После завершения первой команды (т.е. killall -u user -w) система переходит к выполнению следующей команды.

  4. shutdown -h now выключает систему немедленно. Флаг -h указывает на то, что система должна быть полностью выключена.

  5. & запускает весь набор команд в фоновом режиме, освобождая терминал для других задач.

В качестве альтернативы, если вы хотите быть уверены, что все процессы были закрыты, перед тем как система выключится, можно использовать команду sleep для добавления небольшой задержки между завершением процессов и выключением системы:

( killall -u user -w ; sleep 5 ; shutdown -h now ) &

Здесь sleep 5 добавляет паузу в 5 секунд после завершения всех процессов и перед выполнением команды shutdown -h now.

от (160 баллов)
0

Спасибо за подробный ответ.

в macos нет signal w (wait) 

есть 

➞  killall -l                                                                                                       
hup int quit ill trap abrt emt fpe kill bus segv sys pipe alrm term urg stop 
tstp cont chld ttin ttou io xcpu xfsz vtalrm prof winch info usr1 usr2 

Сложно уловить разницу в этом списке ) Правильно ли я понимаю, что аналога -w здесь нет? 

Спасибо еще раз)

от (17.4тыс. баллов)
0

Да, вы правильно понимаете. В MacOS команда pkill не имеет опции -w (wait), которая присутствует в команде killall на некоторых других платформах. Однако, вы можете использовать команду sleep для добавления небольшой задержки между завершением процессов и выключением системы:

( pkill -U user -9; sleep 5; sudo shutdown -h now ) &

Здесь sleep 5 добавляет паузу в 5 секунд после завершения всех процессов и перед выполнением команды sudo shutdown -h now. Это может дать системе время для корректного завершения процессов перед выключением.

...