Intereting Posts

Как я могу убить процесс по определенному имени и исключить процессы root

Не так давно мы узнали о pkill и мы имели в виду, чтобы начать использовать его в скрипте setuid (для root) для глобальной очистки процессов. Это может сэкономить нам много глупого обслуживания, когда некоторые клиенты не могут удалить общие ресурсы, используя свои скрипты, только из-за не важных ограничений на доступ.

Однако после некоторого pkill -v -u root <name> мы только придумали pkill -v -u root <name> (до сих пор мы намерены сделать его простым и предотвратить превращение в длинный и уродливый скрипт с sed , awk , grep и т. Д.). Конечно, он не работает – он просто убивает все, кроме процессов, которые соответствуют данному имени.

Есть ли какая-либо короткая модифицированная версия этой команды pkill которая дает нам те результаты, которые нам нужны?

PS: Я хочу избегать дискуссий о нравственности предоставления пользователям какой-то корневой власти.

Текущая ОС – Solaris 10, если это имеет значение.

Это создаст список процессов с указанным именем и список процессов с заданным именем, запущенным от имени root, затем запустите comm для поиска процессов в первом списке, которые не входят во второй список, а затем убейте их.

 #!/bin/ksh if test $# != 1 then echo usage: "$0" processname exit 1 fi pname="$1" kill $(comm -23 <(pgrep "$pname"|sort -n) <(pgrep -u root "$pname"|sort -n)) 

Я использую SUSE, но предполагаю, что он работает аналогично на Solaris.

Процесс убийства для пользователя

Чтобы убить процесс по его идентификатору пользователя, вы можете сделать следующее

#pkill -U <username>

Проверка процессов для пользователя

Если вы просто хотите проверить, какие процессы запущены для определенного пользователя, прежде чем убить его процессы, вы можете использовать: pgrep -U <username

Убить процесс для нескольких пользователей

#pkill -U <user1>,<user2>,<user3> и т. д.

Убейте всех пользователей, кроме root

Я знаю, что вы избегаете sed, awk, grep. Но проще написать сценарий, а не вводить каждое имя пользователя. Вот пример. Пожалуйста, проверьте на sanbox перед исполнением на производстве.

 ps -aef |grep -v UID |grep -v root |awk '{print $1}' |sort -u |while read name do echo "Killing process for user $name" pkill -U $name done