pkill -KILL -u {username}
Просто отправляет SIGKILL каждому дочернему элементу init --user? и гарантирует ли это, что каждый дочерний процесс безопасно убит?
Он отправляет SIGKILL всем процессам, принадлежащим учетной записи {username}
, независимо от их родителя. (Обратите внимание, что init --user несколько специфичен для дистрибутива.)
Тем не менее, это далеко не так безопасно, как вы можете пойти. SIGKILL - это метод грубой силы, который завершает все процессы, не давая им должным образом отключиться и очиститься; это противоположность "безопасно".
Многие терминальные программы реагируют на SIGHUP как "зависание линии". Через несколько секунд остальные можно остановить с помощью SIGTERM. Только тогда, если у вас останутся остатки после SIGHUP и SIGTERM, вы должны использовать SIGKILL в качестве окончательного подхода.
- Это можно сделать с помощью отправки сигналов?
Возможно - большинство программ понимают SIGHUP или SIGTERM. Но графические программы могут предпочесть, чтобы их останавливал менеджер сессий, то есть gnome-session, используя ICE/XSMP (я не знаю, как это работает точно). В целом, самый безопасный подход заключается в использовании команды выхода из среды рабочего стола; например:
gnome-session-quit --logout --force --no-prompt
gnome-session-save --force-logout --silent
qdbus org.kde.ksmserver /KSMServer logout 0 -1 -1
qdbus org.razorqt.session /RazorSession logout
mate-session-save --logout
xfce4-session-logout --logout