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

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

pkill -U tim

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

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

8
задан 3498DB
14.04.2023 22:50 Количество просмотров материала 3267
Распечатать страницу

5 ответов

вроде 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 -- пройдет все ID процесса, чтобы убить команда

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

ps -U tim | egrep -v "ssh|screen" | awk '{print }' | xargs -t kill
10
отвечен Roy Rico 2023-04-16 06:38

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

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

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

-e '/processname/d'

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

1
отвечен djhowell 2023-04-16 08:55

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

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

Это за "hackerish" и в просто "взломать", но он имеет дополнительное преимущество в что любые другие программы, которые вы запускаете в качестве пользователя "connect", не будут убиты, когда вы убиваете других процессов. Это может включать в себя "хвосты" журналов ошибок и тому подобное, которые вы, возможно, захотите оставить.

надеюсь, что это помогает!

1
отвечен pbr 2023-04-16 11:12

попробуй:

ps aux | grep ^$LOGNAME | egrep -v 'ps aux|-bash|sshd' | awk '{ print  }' | xargs kill -9; ps aux | grep $LOGNAME
1
отвечен Jack 2023-04-16 13:29

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

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

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

0
отвечен mkastner 2023-04-16 15:46

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх