Я не могу найти какие-либо примеры в Интернете для этой конкретной задачи.
Вы можете сделать это либо через:
for i in $(pgrep -U $UID_OF_ANOTHER_USER); do kill -9 $i; done
ИЛИ ЖЕ
pkill -U $UID_OF_ANOTHER_USER
Вы можете использовать первый, чтобы сделать что-то большее, чем просто убить эти процессы, например, перечислить их все во время убийства.
Вот простое решение, которое будет работать, если вы являетесь пользователем root.
su $uid -c kill SIGSTOP -1
Пояснение: станьте этим пользователем и убейте все, что сможете.
Для всех решений потребуется CAP_KILL (разрешение на уничтожение любого процесса) или традиционный root (root имеет это разрешение), а также разрешение (возможность изменять свой собственный uid), как используется этим решением.
Заметьте, что я отправил sigstop, это приостановит процесс (как указано в ☺). Выберите сигнал, который вы хотите. Используйте сигкилл как последнее средство.
killall -u $user -STOP
Это безопасно, если запускать от имени другого пользователя и (для других сигналов), если ни один родительский процесс не принадлежит затронутому пользователю.
Решение ctrl-alt-delor, вероятно, лучше (безопаснее). У этого есть преимущество, дающее вам реальный код выхода. Другой, вероятно, не так, как su
и kill
убивают сами.