Як знайти та знищити віддалені процеси в Linux?


1

Я розвиваю демона, який реагує, і тепер я не в змозі створити жодних нових процесів (тобто я не можу запустити новий процес для вбивства інших негідних процесів). Отже, мені потрібно вміти вбивати процеси з віддаленої машини. Як я можу "вбити" віддалено без прав адміністратора? Якщо я не можу вбити власний процес із віддаленої машини як звичайний користувач, то скажіть мені, щоб я міг позначити це як правильну відповідь.


Вам не потрібен ідентифікатор процесу з pkill. Тільки назва процесу
Джо Філіпс,

pkill grep - команда, kill використовує ідентифікатор процесу. Хоча, що це зупиняє запуск нових процесів, forkbomb?
ewanm89

2
Я не зовсім слідкую. Якщо ви не можете створити жодних нових процесів, як ви очікуєте підключитися до машини, а потім запустити pkillабо kill? Це принаймні два нові процеси, які доведеться створити.
Doug Harris

@Doug: Моє погано, я думав, що ви можете надати pkill ім'я сервера як аргумент, і це піде на машину і вб'є процес. Тепер, коли я замислююся про те, навіть якщо у pkill був такий функціонал, він, ймовірно, повинен увійти як я. Тож виглядає так, що я не можу зробити це самостійно, і що адміністратор - це єдиний чоловік, який може вбити ці роботи для мене, правда?
stephenmm

@ewanm: Я не зовсім впевнений, що таке forkbomb, і чому я більше не можу виконувати жодні команди на машині. Щоразу, коли я щось роблю (ls, pwd тощо), я отримую помилку: "Більше немає процесів". У мене складається враження, що я не зможу вирішити цю проблему самостійно.
stephenmm

Відповіді:


7

Щоб вбити процес, що працює на машині, деякий локальний процес (або ядро) повинен випромінювати сигнал вбивства. Отже, вам потрібен спосіб викликати процес, який випромінює цей сигнал, і оскільки ви не можете створити новий процес, вам потрібно знайти спосіб, який покладається виключно на вже запущені процеси.

Немає стандартного демона, який би там міг вам допомогти. Усі вони оброблять вашу автентифікацію, а потім розщеплюють новий процес (наприклад, оболонку), що працює як ви. Тож якщо у вас немає доступу до консолі та немає взаємодії з машиною, вам не пощастить.


З ваших коментарів звучить, як у вас все ще є оболонка на машині. Тоді є речі, які ти можеш зробити. Ви не можете запустити жоден зовнішній процес, наприклад, lsабо ps. Але ви можете запускати вбудовані команди, такі як echo, readі kill( killне є вбудованою у всі оболонки, але це одна у всіх оболонках, яка підтримує контроль за роботою, наприклад, bash та zsh).

Кожен процес має відповідний каталог під /proc: /proc/12345де 12345 - ідентифікатор процесу. Таким чином, ви можете отримати деяку інформацію про існування, вивчивши /proc. echoТут є корисною символами, наприклад, cd /proc; echo [0-9]*показує ідентифікатори процесів усіх запущених процесів. Якщо оболонка zsh, ви можете багато зробити з глобальними класифікаторами; наприклад, echo /proc/*(u$UID)показує лише процеси, що працюють під вашим ідентифікатором користувача.

Спосіб відображення вмісту файлу без розгортання є

while read -r line; do
  echo "$line"
done </path/to/file

Ви можете вбити багато процесів одночасно, передавши їх усім kill. Якщо ви визначили процес, який належить вашому демону, спробуйте вбити його групу процесу, kill -9 -PGIDде PGIDзнаходиться ідентифікатор процесу лідера групи. Ви можете знайти ідентифікатор групи процесів 123 з </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp. (Ця ж інформація існує і в більш читаному вигляді, /proc/123/але ви не в змозі її прочитати.) Ви також можете спробувати надіслати сигнал усім вашим процесам (включаючи вихідну оболонку) за допомогою

trap : NUM
kill -NUM -1

Виберіть значення NUM, крім KILL(9), щоб trapкоманда ігнорувала сигнал ( KILLне може бути захоплений).


2

Наступна інформація була знайдена на веб- сайті http://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/

Вбивчий процес за допомогою команди kill під Linux / UNIX

Команда kill працює як під операційними системами Linux, так і з UNIX / BSD.

крок №1: Спочатку потрібно з’ясувати PID процесу (ідентифікатор процесу)

Використовуйте команду ps або команду pidof, щоб дізнатися ідентифікатор процесу (PID). Синтаксис: ps aux | grep processname ім'я процесу pidof

Наприклад, якщо ім'я процесу lighttpd, ви можете використовувати будь-яку з наступних команд для отримання ідентифікатора процесу:

ps aux | grep lighttpdOutput

lighttpd  3486  0.0  0.1   4248  1432 ?        S    Jul31   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
lighttpd  3492  0.0  0.5  13752  3936 ?        Ss   Jul31   0:00 /usr/bin/php5-cg

АБО використовуйте команду pidof, яка використовується для пошуку ідентифікатора процесу запущеної програми:

pidof lighttpd

Вихід

3486

Крок №2: знищити процес за допомогою PID (ідентифікатор процесу)

Вищенаведена команда повідомить вам PID (3486) процесу lighttpd. Тепер убити процес за допомогою цього PID:

# kill 3486

АБО

# kill -9 3486

Де, -9 - спеціальний сигнал вбивства, який вбиває процес.

приклади команд killall

НЕ ВИКОРИСТОВУЙТЕ команду killall в системі UNIX (команда лише для Linux). Ви також можете використовувати команду killall. Команда killall знищує процеси за назвою (не потрібно знаходити PID):

# killall -9 lighttpd

Убийте процес Firefox:

# killall -9 firefox-bin

Як я вже говорив, killall в системі UNIX робить щось інше. Це вбиває весь процес, а не лише конкретний процес. Не використовуйте killall в системі UNIX (використовуйте kill -9).


4
Вам слід спробувати kill / killall без того, -9 як робити це -9. Добре складені демон демонструє сигнал SIGTERM (за замовчуванням для kill) та може зробити чистку перед тим, як вимкнутись. Будьте ласкаві до ваших системних ресурсів і нехай ваші демони добре звільняють їх. Якщо демон все ще не вмирає, то продовжуйте і надсилайте SIGKILL ( -9).
Дуг Харріс

Вау дуже ретельно! На жаль, я знаю, як вбивати процеси, що мені потрібно знати, як вбити процес, коли я не можу увійти до машини.
stephenmm

1
@Doug: Спасибі, я завжди цікавився, чому ти не просто завжди вбиваєш -9! Дякую за просвітлення.
stephenmm

1

Як ви сказали у своєму коментарі, адміністратор - це єдина людина, яка може допомогти вам у цьому пункті. Я пропоную вам отримати кулінарну книгу Perl і прочитати розділ 16.19 для правильного способу поводження із зомбі.

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