Пример сценария оболочки, чтобы остановить выполнение всех процессов с определенным UID?

Я не могу найти какие-либо примеры в Интернете для этой конкретной задачи.

Вы можете сделать это либо через:

 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 убивают сами.