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

потому что `...` эквивалентен $ (...), который является подоболочкой. изменение переменных в подоболочке теряется при закрытии подоболочки.

2
03.03.2016, 01:26
2 ответа

Это сгенерирует список процессов с заданным именем и список процессов с заданным именем, запущенных от имени 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))
2
27.01.2020, 22:04

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

Завершить процесс для пользователя

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

#pkill -U

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

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

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

#pkill -U , <пользователь2>, <пользователь 3> и так далее.

Убейте всех пользователей, кроме 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
1
27.01.2020, 22:04

Теги

Похожие вопросы