GNU/Linux >> Znalost Linux >  >> Linux

SIGTERM vs SIGKILL:Jaký je rozdíl?

Ukončení procesu je klíčovou součástí správy procesů v Linuxu.

Vzhledem k tomu, že procesní řízení je téma samo o sobě, nebudu se v tomto příspěvku zabývat podrobnostmi správy uživatelských procesů a zpracování signálů.

Zaměřím se na použití signálů SIGTERM a SIGKILL k ukončení procesu. Také proberu, proč byste se měli vyhnout používání SIGKILL.

Co je SIGTERM?

V systémech podobných UNIXu se signál SIGTERM používá k ukončení programu. Můžete to do značné míry odhadnout z jeho názvu, který se skládá z SIGNnal a TERMinate.

SIGTERM lze také označit jako měkké zabití, protože proces, který přijímá signál SIGTERM, se může rozhodnout jej ignorovat.

Jinými slovy, je to zdvořilý způsob, jak zabít proces.

Jak poslat SIGTERM procesu v Linuxu?

Příkaz kill v Linuxu se používá k odesílání všech takových signálů procesům.

Ve výchozím nastavení příkaz kill vysílá signál SIGTERM. Můžete to výslovně uvést s -15, ale to je nadbytečné.

Abyste mohli tento příkaz použít následujícím způsobem, budete potřebovat znát pid procesu:

kill <process_id>

K získání ID procesu můžete v Linuxu použít příkaz ps.

Co je SIGKILL?

SIGKILL se používá k okamžitému ukončení procesu. Tento signál nelze ignorovat ani blokovat. Proces bude ukončen spolu se svými vlákny (pokud existují).

Je to brutální způsob, jak zabít proces a měl by být používán pouze jako poslední možnost. Předpokládejme, že máte nereagující proces, který chcete ukončit. V takovém případě lze použít SIGKILL.

Jak poslat SIGKILL do procesu v Linuxu?

Můžete použít volbu -9 pro odeslání signálu SIGKILL pomocí příkazu kill a okamžité ukončení procesu:

kill -9 <process_id>

SIGTERM vs SIGKILL:Proč byste měli preferovat používání SIGTERM před SIGKILL?

Ačkoli se oba tyto signály používají k ukončení procesu, existují mezi nimi určité rozdíly:

  • SIGTERM elegantně zabije proces, zatímco SIGKILL proces zabije okamžitě.
  • Signál SIGTERM lze zpracovat, ignorovat a blokovat, ale SIGKILL nelze zpracovat ani blokovat.
  • SIGTERM nezabije podřízené procesy. SIGKILL také zabíjí dětské procesy.

Někteří uživatelé Linuxu mají ve zvyku používat ‚kill -9‘ a to je něco, čemu byste se měli vyhnout. Pokud nereagujete na proces, nemusíte SIGKILL používat.

Se SIGTERM získá proces čas k odeslání informací svým nadřazeným a podřízeným procesům. Jeho podřízené procesy jsou zpracovávány init.

Použití SIGKILL může vést k vytvoření zombie procesu, protože zabitý proces nemá šanci sdělit svému nadřazenému procesu, že obdržel signál zabíjení.

Tento komiks od Turnoff vtipně vysvětluje rozdíl mezi SIGTERM a SIGKILL.

Doufám, že nyní lépe rozumíte zabíjení procesu pomocí SIGTERM nebo SIGKILL.

Pokud máte nějaké dotazy nebo návrhy, neváhejte zanechat komentář.


Linux
  1. Co znamená ve výstupu Ps?

  2. Jaký je rozdíl mezi ls a l?

  3. Jaký je rozdíl mezi Nepreemptivním, Preemptivním a Selektivním Preemptivním jádrem?

  1. Spravované VPS vs. Nespravované VPS:Jaký je rozdíl?

  2. Jaký je rozdíl mezi kill , pkill a killall?

  3. Jaký je rozdíl mezi unlink a rm?

  1. Rozdíl mezi SIGKILL SIGTERM s ohledem na procesní strom

  2. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  3. Jaká je definice relace v linuxu?