GNU/Linux >> Znalost Linux >  >> Linux

Master Linux Kill Process pomocí ps, pgrep, pkill a dalších

Správa procesů v Linuxu se může zdát novému správci systému (sysadminovi) zpočátku skličující. Ale s malým vysvětlením a ukázkou se naučíte, jak najít a provést procesy zabíjení v Linuxu, je jen otázkou použití nástrojů příkazového řádku, jako je ps a kill .

V tomto článku se naučíte příkazy pro lokalizaci běžících a chybujících procesů, zabíjení (ukončování) běžících procesů, hledání procesů na pozadí a mnoho dalšího v jakémkoli operačním systému Linux.

Na konci článku budete řídit procesy založené na identifikačních číslech procesů (PID) z příkazové řádky jako linuxový profík. Pokračujte ve čtení, abyste se dozvěděli vše o příkazech správy procesů v Linuxu!

Předpoklady

Tento článek bude průvodcem, jak spravovat procesy v Linuxu. Pokud chcete být praktický, budete potřebovat následující:

  • Linuxový hostitel, což může být virtuální nebo fyzický stroj.
  • Chcete-li vyzkoušet příklady prostředí PowerShell, nainstalujte PowerShell 7.1.1 na hostiteli Linuxu.
  • Uživatelský účet bez oprávnění root. I když není vyžadován přístup root, existuje příklad, kdy může uživatel root ukončit běžící proces jiného uživatele.

Distribuce Linuxu, kterou se rozhodnete používat, je na vás. Tento článek bude založen na Ubuntu 20.04 LTS. Příkazy jsou však standardní pro operační systém Linux.

Jste připraveni začít? Dobře, pojďme se ponořit.

Správa procesů v Linuxu

Občas se můžete dostat do scénáře, kdy potřebujete zastavit běžící proces v systému Linux. Jako příklad můžete mít bash skript, který běží podle plánu. Tento bash skript je nakonfigurován tak, aby se spouštěl jako jiný uživatel prostřednictvím cronu (Linuxový plánovač procesů).

Někdy tento skript vyvolá chybné procesy, které mohou způsobit selhání skriptu. Jak zabijete tyto chybující procesy, aniž byste restartovali systém nebo zastavili skript?

V dalších částech si projdete příkazy používané k nalezení a ukončení nebo zabití procesy v systému Linux. Každá sekce bude navazovat na poslední. Dozvíte se o ps , top , pgrep , kill a pkill všechny příkazy nativní pro Linux.

Jako bonus ekvivalentní příkazy PowerShellu Get-Process a Stop-Process jsou zahrnuty, pokud nativní příkazy Linuxu nejsou vaším stylem.

Nástroje pro lokalizaci procesů

Před zabitím procesu musíte najít správný proces, na který chcete cílit. Unikátní PID umožňuje přesné zaměření. Čtěte dále a zjistěte, jak najít správné procesy pro ukončení.

Pomocí ps Příkaz k zobrazení informací o procesu

Stav procesu nebo ps zobrazí informace související s aktivními procesy v systému Linux. Můžete najít běžící proces a dokonce procesy na pozadí s ps .

Příkaz ps ve výchozím nastavení zobrazí všechny procesy pro efektivní identifikaci uživatele (EUID) aktuálního uživatele. Spuštění ps příkaz, jak je ukázáno níže, vrátí každý spuštěný proces, který může váš uživatel ukončit.

ps

Vyhledání rozšířených informací o procesu pomocí top Příkaz

Co když chcete najít neustále se obnovující informace o běžících procesech a systémových metrikách, v takovém případě můžete použít top příkaz. Na rozdíl od ps , top příkaz aktualizuje informace o procesu na obrazovce v nastaveném intervalu.

Když spustíte top příkaz, uvidíte více než jen PID. Podrobnosti o procesu jsou zahrnuty v procentech CPU a paměti, Pěkné hodnoty (priorita procesu plánování CPU) a prioritu procesu (PR) nastavenou linuxovým jádrem.

Pro nového nebo zkušeného správce systému top příkaz je často primárním nástrojem pro správu životně důležitých systémových zdrojů a procesů. Jak je uvedeno níže, top výstup příkazu zobrazuje více informací o procesu než ps včetně celkových systémových metrik.

htop je vylepšená varianta top která zahrnuje různá vylepšení, například barevný výstup na terminál.

Řekněme, že byste chtěli zkontrolovat paměť nebo zdroje CPU, které proces spotřebovává. V takovém případě můžete použít p přepínač top jak je uvedeno níže.

top -p 2113

Možná budete muset zobrazit všechny běžící procesy pro konkrétní uživatelské jméno. top příkaz nabízí u přepnout a zobrazit pouze procesy konkrétního uživatele. Jak je vidět v příkladu níže, PID se shodují pouze s ID uživatele bkindle jsou zobrazeny.

top -u bkindle

Vyhledání PID konkrétního procesu pomocí pgrep Příkaz

Původně příkaz Solaris, pgrep byl portován pro použití s ​​Linuxem. Kombinace vyhledávacího výkonu grep příkaz a řízení procesů ps , pgrep nabízí flexibilitu při hledání přesného procesu, na který chcete cílit.

Ačkoli ps zobrazí další informace, pgrep je navržen tak, aby vracel pouze PID vrácených procesů. pgrep pomáhá s lokalizací procesu pomocí mnoha dostupných parametrů vyhledávání . V následujícím příkladu pgrep se zobrazí hledání jakéhokoli procesu odpovídající vmtoolsd .

pgrep vmtoolsd

Podobně zadejte ID uživatele pomocí u přepnout a načíst pouze procesy spojené s tímto konkrétním uživatelem. Jak je ukázáno níže, pro uživatele bkindle je vrácen pouze jeden PID a vmtoolsd proces.

pgrep -u bkindle vmtoolsd

Hledání procesů pomocí Get-Process PowerShellu v Linux

Typické příkazy Linuxu fungují skvěle, ale věděli jste, že PowerShell dokáže spravovat i procesy Linuxu? Get-Process cmdlet funguje podobně jako Linux ps příkaz a vrátí informace o procesu. Například možná potřebujete najít všechny běžící procesy aktuálního uživatele bkindle . Jak je uvedeno níže, najděte všechny PID (označené ID podle Get-Process ) uživatele bkindle .

Get-Process -IncludeUserName |
	Where-Object {$_.UserName -eq 'bkindle'} |
	Select-Object -Property 'Id','UserName','ProcessName'

Související:Jak používat PowerShell Where-Object k filtrování všech věcí

Poté, co jste se naučili, jak lokalizovat různé procesy, čtěte dále a objevte všechny způsoby, jak ukončit nebo ukončit proces v Linuxu!

Zabíjení procesů pomocí příkazů Kill v Linuxu

V předchozích částech jste se naučili, jak najít PID procesu, kterému chcete poslat signál ukončení pomocí nativních příkazů Linuxu a PowerShellu. Následující sekce vysvětlí, jak používat kill a pkill programy, související signály a přepínače příkazového řádku.

Linux Signals and Process Management

Signály jsou metodou, kterou Linux používá ke komunikaci s procesy běžícími v operačním systému. Tři primární signály, že kill příkazy používané k ukončení procesů jsou:

  • 1 (SIGHUP) – Ukončí interaktivní programy a způsobí, že démoni (služby na pozadí) znovu načtou konfigurační soubory, které proces používá.
  • 9 (SIGKILL) – Vynutí ukončení procesu bez provedení ladných úloh vypnutí.
  • 15 (SIGTERM) – Umožňuje plynulé ukončení procesu, jako je zavření otevřených souborů po dokončení. Toto je výchozí signál, který se používá, když není při použití příkazu kill zadáno žádné číslo.

I když se tento článek zaměřuje pouze na tři hlavní signály používané pro procesy zabíjení, existuje celkem 64 dostupných signálů. Použijte kill -l získat seznam signálů a jejich odpovídající počet.

Nyní, když rozumíte třem hlavním signálům používaným k ukončení procesu, se v dalších částech dozvíte, jak proces zabít.

Pomocí kill Příkaz k ukončení procesu

V tomto dalším příkladu použijete kill příkaz. Předstírejte na okamžik, že máte spuštěnou instanci PowerShellu s názvem pwsh a přiřazené PID je 22687. Jeden způsob ukončení tohoto procesu je uveden níže.

  1. Použijte pgrep pwsh k určení PID pro proces pwsh , používaný v kill příkaz.
  2. Použijte kill -s TERM 22687 pro ukončení pwsh zpracovat elegantně. TERM příkaz mapuje na signál 15 (SIGTERM) a je indikován pomocí s parametru kill příkaz.
  3. Použijte svůj výběr top , ps nebo pgrep pro ověření, že PID již není uvedeno.

Níže je uveden příklad výše uvedeného procesu z bash terminálu Ubuntu 20.04 LTS.

killall příkaz ukončí všechny procesy založené na názvu namísto PID, což může způsobit, že tento příkaz je při neopatrném použití pěkně destruktivní. Pokud se však rozhodnete použít tento příkaz, použijte i způsobí, že příkaz požádá o potvrzení.

Zabíjení procesů podle názvu pomocí pkill

Možná jste si všimli, že kill příkaz funguje pouze s ID procesů. To může z ukončení procesu udělat komplikovaný vícekrokový proces. pkill příkaz, který je součástí procps a procps-ng packages, ukončí proces na základě hledaného jména.

Funkčně pkill příkaz funguje jako obal kolem pgrep program. pkill příkaz odešle specifikovaný signál do každého nalezeného procesu namísto pouze výpisu PID v terminálu. pkill se liší od kill v tom pkill může používat pouze název procesu, nikoli PID.

Číslo pkill příkaz není ve výchozím nastavení k dispozici v Ubuntu 20.04 LTS. Budete si muset stáhnout a nainstalovat aplikaci. Chcete-li tak učinit, spusťte sudo apt install mcollective-plugins-process -y .

Chcete-li zabít proces pomocí pkill , proveďte následující kroky:

  1. Použijte ps pro ověření, zda je aktuálně spuštěná aplikace nano (textový editor příkazového řádku). Tento krok je volitelný, ale je to bezpečnostní kontrola před ukončením procesu.
  2. Použijte pkill -9 nano k násilnému ukončení nano aplikace.

Níže je uveden příklad výše uvedeného procesu z bash terminálu Ubuntu 20.04 LTS.

Zabití procesu pomocí Top Příkaz

Když spustíte top pro zobrazení běžících procesů, můžete daný proces zabít pomocí k stisknutí klávesy. Zobrazí se interaktivní výzva s dotazem na PID procesu, který má být ukončen.

Jak je uvedeno níže, spusťte top a stiskněte k. Zadejte PID, které chcete zabít, a stiskněte Enter pro okamžité ukončení PID.

Dále se naučte ještě jednu alternativu k nativním příkazům Linuxu pomocí prostředí PowerShell Stop-Process příkaz!

Použití prostředí PowerShell Stop-Process Příkaz k ukončení procesu

Pokud nativní příkazy Linuxu nejsou vaším stylem, PowerShell vás pokryje! Stejně jako u kill můžete ukončit procesy pomocí Stop-Process cmdlet v Linuxu. Ještě jednou předstírejte, že používáte PowerShell pwsh proces.

  1. Najděte PID pomocí Get-Process -ProcessName 'pwsh' a poznamenejte si PID k ukončení.
  2. Použijte Stop-Process -Id 29992,30014 k ukončení více vrácených procesů.
  3. Použijte Get-Process -ProcessName 'pwsh' a ověřte PID, 29992 a 30014 již nejsou uvedeny, což znamená, že byly ukončeny.

Můžete také použít Get-Process a kill metoda k ukončení jednoho nebo více procesů:(Get-Process -Id [PID]).Kill() nebo (Get-Process -Id [PID1,2,3,4]).Kill() .

Při používání ProcessName buďte opatrní parametr. Použití tohoto parametru se chová podobně jako killall příkaz a zabije všechny procesy odpovídající zadaným jménům.

Níže je uveden příklad výše uvedeného procesu z bash terminálu Ubuntu 20.04 LTS.

Další kroky

Nyní byste měli znát mnoho způsobů, jak najít a ukončit procesy v Linuxu! Jako další výzvu zkuste zabíjet procesy vzdáleně pomocí připojení SSH nebo zabíjením procesů, které mohou běžet v kontejnerech.

Související:Chlap s Windows ve světě Linuxu:Nastavení SSH v Linuxu


Linux
  1. Jak zabít proces v Linuxu pomocí příkazu?

  2. Linux:Najděte a zabijte zombie procesy

  3. linuxový skript pro zabití procesu Java

  1. Jak najít a zabít zombie proces v Linuxu

  2. Rozdíl mezi Kill, Pkill a Killall?

  3. Jak zabít všechny procesy vrácené pgrep

  1. Správa procesů na Linuxu pomocí kill and killall

  2. Jak zabít proces v Linuxu? Příkazy k ukončení

  3. Linux:Zobrazení a ukončení odmítnutého procesu