знищити всі процеси користувача, крім кількох в Linux


6

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

pkill -U tim

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

Чи є спосіб знищити всі мої процеси, крім з'єднання екрана та ssh?

Відповіді:


12

Якийсь хакерський:

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 - передасть усі ідентифікатори процесу команді kill

Ви також можете використовувати awk, якщо ви більше звикли до цього.

ps -U tim | egrep -v "ssh|screen" | awk '{print $2}' | xargs -t kill

2

Нічого, що будується в тому, що я знаю. Ви можете створити такий сценарій:

#!/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. Мабуть, існує більш чистий спосіб впоратися, але це спрацює.


Так. Ви можете додати -e '/ login / d' та видалити -e '/ bash / d'. Тоді ви навіть можете перезавантажити root FS як RO. Я маю на увазі випадок, коли ви перебуваєте в кореневому терміналі, який не є X11. PS: Якщо ви перебуваєте в X11, то спочатку вийдіть із системи.
користувач1742529

1

Якщо ви вбиваєте багато своїх проектів дуже багато, ви, можливо, захочете розслідувати, чому вам потрібно це зробити ... але ей, це все в тому, щоб робити речі, а не в тому, щоб не робити справ.

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

Це виходить за межі "хакерського" та просто простого "хаку", але це має додаткову перевагу в тому, що будь-які ІНШІ програми, які ви запускаєте як "підключення", користувачі не загинуть, коли ви вбиватимете інші програми. Це може включати "хвости" журналів помилок і подібні речі, які, можливо, ХОЧУТЕ залишити.

Сподіваюся, це допомагає!


Ви маєте на увазі наявність двох ідентифікаторів користувача для віддаленого сервера? Просто цікаво, чи можу я створити інший для себе, не маючи можливості переключитися на root?
Тім

1

Спробуйте:

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

0

Я використав підхід @RoyRico - не можу коментувати цю посаду через відсутність репутації - і налаштував її на свою систему. Через деяку іншу конфігурацію, яка не працювала поза штатним режимом.

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

Ну, я виключив більше процесів, які не хотів би вбивати. По-друге, PID потрапили в першу колонку, тому колишня команда 'cut' була абсолютно неправильно розміщена (як хакерське рішення щось абсолютно нормальне і прийнятне;)). По-третє, під час grep'ing у мене був "PID" як лінія голови, яку я виключав, використовуючи хвіст.


0

Щоб доповнити існуючі відповіді, для мене працювало наступне.

  • PID відображається в першій колонці на моїй машині, отже, b1-6
  • Як і інший плакат, я включив назви процесів, що використовуються в команді, які в іншому випадку можуть бути зібрані в команді kill.
  • Включіть PID у список ігнорування, щоб видалити заголовок
  • Включення --no-run-if-emptyдо xargsопції пригнічує записування довідки на екран, якщо в xargsкінцевому підсумку залишається порожнім, тобто. не знайдено жодних процесів.
  • Якщо ви помістите це в bash-скрипт, включіть bashі ім'я bash-скрипту в список ігнорованих команд!

    ps -U myUserName | egrep -v "ssh|screen|PID|ps|grep|cut|xargs|kill" | cut -b1-6 | xargs -t --no-run-if-empty kill

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.