вбивати -9 програм, але вони все ще тримаються


11

Я намагався вбити всі мої фонові завдання, подані раніше під KUbuntu

kill -9 $(jobs -p)

Хоча ця команда негайно дала повідомлення типу

[1] Вбив мою роботу1

[2] Вбив мою роботу2

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

Тож я здогадуюсь, мабуть, не вбив їх належним чином. Чи можу мені хтось пояснити, що відбувається зі мною і що мені робити?

Я виявив, що вгорі, якщо набрати k і ввести PID, я можу вбивати процеси по черзі. Так це відрізняється від команди kill?

Я також виявив десь в Інтернеті http://www.ruhr.de/home/smallo/award.html про те, як не рекомендувати вбити -9

Марне використання бланка-формату Kill -9

(Цитата гидоти)

Ні-ні-ні. Не використовуйте kill -9.

Це не дає процесу чисто:

1) відключити розетки

2) очищення тимчасових файлів

3) повідомити своїх дітей, що йде

4) скинути його термінальні характеристики

і так далі, і так далі.

Як правило, надішліть 15, і зачекайте секунду-дві, і якщо це не працює, надішліть 2, а якщо це не працює, надішліть 1. Якщо цього не відбувається, ВИДАЛУЙТЕ БІНАРУС, оскільки програма погано ведеться!

Не використовуйте kill -9. Не виймайте зернозбиральний комбайн лише для того, щоб виправити квітковий горщик.

Це правда? Що означає "надіслати 15", "надіслати 2" та "надіслати 1"? Чи вони самі командують або "вбивати -15 PID", "вбивати -2 PID" і "вбивати -1 PID"?

Дякую та з повагою!


Видалення двійкового (виконуваного файлу) само по собі не вб'є процес. Файлова система буде знати, що процес використовує цей файл, і дозволить процесу "побачити" файл навіть після того, як ви його видалили.
Джеппе Стіг Нільсен

Відповіді:


9

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

ось два простих кроки, щоб убити зомбі ...

  1. якщо батько все ще живий, спробуйте його вбити (або SIGHUP - все, що вам потрібно)
  2. якщо номер 1 не вдається, в ядрі є помилка .... перезавантажте ваш друг і виправте цю помилку: ->

Я подаю свої завдання в командному рядку та у фоновому режимі, якими б були їхні батьки? І як я можу знайти їхніх батьків, якщо такі є?
Тім

Використовуйте -fпрапор ps для перегляду батьківських процесів.
Джек М.

6

див. man killвизначення різних доступних сигналів, але так.

  • 15 - SIGTERM і просить програму вийти.
  • 2 є SIGINT і еквівалентно Control-C
  • 1 - SIGHUP і вказує на те, що термінал завис.

Вони інформують процес про те, що користувач виконує процес, хоча вони вказують на дещо інші причини. SIGTERM може трактуватися як "закінчити поточну задачу, але потім вийти; не запускати іншу", SIGINT означає "відмовитися від того, що ти "роби і кидай", SIGHUP просто означає, що ніхто більше не слухає (серверний процес може законно реагувати на SIGHUP, припинивши вихід консолі та продовжуючи працювати).

  • 9 - це SIGKILL , і він особливий тим, що це єдиний, який процес не може зловити і обробити внутрішньо. Це просто призводить до того, що ядро ​​ніколи не повертає контроль над процесом, не даючи йому шансу на очищення.

вгорі, якщо введіть k і введіть PID, я можу вбивати процеси по черзі. Тож це еквівалент деяким варіантам команди kill?
Тім

Так, вершина просто надсилає сигнал до процесу, як і вбивство. AFAICT, сигнал за замовчуванням, який використовує топ, становить 15 (SIGTERM).
puetzk


1

Це означає "вбити -1" або "вбити -15" замість того, щоб вводити "убити -9". Kill -9 - це жорстка куля в голову будь-якого запущеного процесу, вбиває його мертвим у брудному стані, що може спричинити протікання пам'яті, бла-бла.

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


Як би ви виглядали, щоб переконатися, що процес не відновлюється? Оскільки я володію процесами, чи маю я дозвіл на вбивство цього процесу?
Тім

Він повинен мати інший номер процесу, якщо він є. Отже, якщо ви робите ps -Al, і ви бачите processA, ви знищуєте -9 processA, а потім виконуєте ps -Al, і в черзі процесів STILL a ProcessA, переконайтеся, що це SAME processA, а не новий.
Satanicpuppy

І він скаже вам, якщо ви не маєте дозволу вбивати процес.
Satanicpuppy

0

Сигнал 9 - SIGKILL. Надсилання SIGKILL просить ОС негайно вбити процес, запитань не задається. Процес не повідомляється заздалегідь і не має шансів очиститись після себе.

Сигнал 15 - SIGTERM. Надсилання SIGTERM просить ОС попросити процес закритись.

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

Програма може ігнорувати SIGTERM, але не рекомендується, щоб програми робили це, оскільки ОС надсилає SIGTERM під час відключення, після чого незабаром SIGKILL, якщо програма все ще працює.

Примітка. Командний рядок killзавжди просить ОС надіслати сигнал додатку, який він може робити, а може, і не робити, залежно від того, кому належить процес тощо.

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