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.
- Použijte
pgrep pwsh
k určení PID pro procespwsh
, používaný vkill
příkaz. - 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
parametrukill
příkaz. - Použijte svůj výběr
top
,ps
nebopgrep
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žijtei
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ťtesudo apt install mcollective-plugins-process -y
.
Chcete-li zabít proces pomocí pkill
, proveďte následující kroky:
- 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. - 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.
- Najděte PID pomocí
Get-Process -ProcessName 'pwsh'
a poznamenejte si PID k ukončení. - Použijte
Stop-Process -Id 29992,30014
k ukončení více vrácených procesů. - Použijte
Get-Process -ProcessName 'pwsh'
a ověřte PID,29992
a30014
již nejsou uvedeny, což znamená, že byly ukončeny.
Můžete také použít
Get-Process
akill
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ě jakokillall
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