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

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

pkill -U tim

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

Существует ли способ уничтожить все мои процессы кроме экрана и соединение SSH?

6
задан 13.07.2011, 12:15

4 ответа

Вид hackerish:

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

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

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

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

ps -U tim | egrep -v "ssh|screen" | awk '{print $2}' | xargs -t kill
12
ответ дан 07.12.2019, 15:32

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

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

Это вне "hackerish" и в просто "взлом", но он имеет добавленное преимущество, в котором ЛЮБЫЕ ДРУГИЕ программы Вы работаете, поскольку пользователь "подключения" не будет уничтожен, когда Вы уничтожите другой procs. Это могло включать "хвосты" журналов ошибок и подобных вещей, которые Вы могли бы ХОТЕТЬ разбросать.

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

1
ответ дан 07.12.2019, 15:32

Ничто созданное в этом я знаю. Вы могли создать сценарий как это:

#!/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 часть. Существует, вероятно, более чистый способ обработать его, но это будет работать.

2
ответ дан 07.12.2019, 15:32

Попытка:

ps aux | grep ^$LOGNAME | egrep -v 'ps aux|-bash|sshd' | awk '{ print $2 }' | xargs kill -9; ps aux | grep $LOGNAME
1
ответ дан 07.12.2019, 15:32

Теги

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