убить все процессы пользователя, кроме нескольких в Linux

10808
Tim

Я выполнял некоторые процессы в сеансе экрана на удаленном сервере. Когда я попытался убить все эти процессы:

pkill -U tim 

все мои процессы убиты, включая те, которые я не хочу убивать (например, экран и соединение ssh).

Есть ли способ убить все мои процессы, кроме экрана и соединения ssh?

5

5 ответов на вопрос

11
Roy Rico

Вроде хакерский

ps -U tim | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill 

это убьет все, кроме ssh или экранных процессов. Вот объясненные команды:

  • ps -U tim - очевидно, перечислит каждый процесс от пользователя tim
  • egrep -v "ssh|screen" - удалит строки с процессами ssh или screen
  • cut -b11-15 - обрежет данные в столбцах 11-15 (как правило, там находится PID
  • xargs -t kill - передаст все идентификаторы процесса команде kill

Вы также можете использовать awk, если вы более привыкли к этому.

ps -U tim | egrep -v "ssh|screen" | awk '' | xargs -t kill 
1
djhowell

Ничего не встроено в то, что я знаю. Вы можете создать скрипт, подобный этому:

#!/bin/bash ps ux | sed -e '/bash/d' -e '/screen/d' | awk '' | while read process do  kill $process done 

Если бы вы хотели избежать каких-либо других процессов, вам просто нужно добавить больше

-e '/processname/d' 

входы в раздел sed. Вероятно, есть более чистый способ справиться с этим, но это сработает.

1
pbr

Если вы много убиваете все свои проки, вы, возможно, захотите выяснить, зачем вам это нужно ... но эй, это все о том, чтобы делать что-то, а не о том, чтобы не делать что-то.

Одним из простых решений было бы использовать два идентификатора пользователя ... один для экрана и вашего SSH-соединения, а другой для всех процессов, которые вы в какой-то момент захотите завершить.

Это за пределами «хакерского» и просто «хакерского», но у него есть дополнительное преимущество в том, что любые ДРУГИЕ программы, которые вы запускаете как пользователь «подключения», не будут убиты, когда вы убьете другие процессы. Это может включать в себя «хвосты» журналов ошибок и тому подобные вещи, которые вы, возможно, ХОТИТЕ оставить.

Надеюсь это поможет!

Вы имеете в виду наличие двух идентификаторов пользователей для удаленного сервера? Просто любопытно, могу ли я создать еще один для себя, не имея возможности переключиться на root? Tim 15 лет назад 0
1
Jack

Пытаться:

ps aux | grep ^$LOGNAME | egrep -v 'ps aux|-bash|sshd' | awk '{ print $2 }' | xargs kill -9; ps aux | grep $LOGNAME 
0
mkastner

Я использовал подход @RoyRico - не могу комментировать этот пост из-за отсутствия репутации - и приспособил его к своей системе. Из-за какой-то другой конфигурации, которая не работала в продаже.

ps -U myUserName | egrep -v "ssh|screen|grep|bash|systemd|(sd-pam)|ps" | awk '' | tail -n +2 | xargs -t kill 

Ну, я исключил больше процессов, которые я не хотел убивать. Во-вторых, идентификаторы PID появились в первом столбце, поэтому прежняя команда «cut» была совершенно неверно расположена (как хакерское решение, совершенно нормальное и приемлемое;)). В-третьих, во время grep'ing у меня был «PID» в качестве заголовка, который я исключил, используя tail.

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