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


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

pkill -U tim

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

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


4
2017-09-30 17:23


происхождения




ответы:


Kinda hackerish:

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

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

  • 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 '{print $2}' | xargs -t kill

10
2017-09-30 18:39





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

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

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

-e '/processname/d'

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


1
2017-09-30 18:36





Если вы много убиваете все свои процессы, вам может потребоваться расследование Зачем вам нужно это сделать ... но эй, это все о том, что делать, а не о не делать вещи.

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

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

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


1
2017-09-30 18:48



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


Пытаться:

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

1
2017-09-22 14:44





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

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

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


0
2017-09-09 13:29