Vyhledávání na webu

Vše, co potřebujete vědět o procesech v Linuxu [Komplexní průvodce]


V tomto článku si projdeme základní pochopení procesů a stručně se podíváme na to, jak spravovat procesy v Linuxu pomocí určitých příkazů.

Proces odkazuje na spuštěný program; je to spuštěná instance programu. Skládá se z programové instrukce, dat načtených ze souborů, jiných programů nebo vstupu od uživatele systému.

Typy procesů

V Linuxu existují v zásadě dva typy procesů:

  • Procesy na popředí (také označované jako interaktivní procesy) – jsou inicializovány a řízeny prostřednictvím terminálové relace. Jinými slovy, musí být uživatel připojený k systému, aby spustil takové procesy; nespustily se automaticky jako součást systémových funkcí/služeb.
  • Procesy na pozadí (také označované jako neinteraktivní/automatické procesy) – jsou procesy, které nejsou připojeny k terminálu; neočekávají žádný uživatelský vstup.

Co je to démoni

Jedná se o speciální typy procesů na pozadí, které začínají při startu systému a běží navždy jako služba; neumírají. Jsou spouštěny jako systémové úlohy (spouštěny jako služby), spontánně. Mohou je však ovládat uživatel prostřednictvím procesu init.

Tvorba procesů v Linuxu

Nový proces se obvykle vytvoří, když existující proces vytvoří přesnou kopii sebe sama v paměti. Podřízený proces bude mít stejné prostředí jako jeho rodič, ale liší se pouze ID procesu.

Pro vytvoření nového procesu v Linuxu se používají dva konvenční způsoby:

  • Použití funkce System() – tato metoda je relativně jednoduchá, je však neefektivní a má výrazně jistá bezpečnostní rizika.
  • Použití funkce fork() a exec() – tato technika je trochu pokročilá, ale nabízí větší flexibilitu, rychlost a zabezpečení.

Jak Linux identifikuje procesy?

Protože Linux je víceuživatelský systém, což znamená, že různí uživatelé mohou v systému spouštět různé programy, musí být každá spuštěná instance programu jednoznačně identifikována jádrem.

A program je identifikován svým ID procesu (PID) a také ID nadřazeného procesu (PPID), takže procesy lze dále kategorizovat do:

  • Nadřazené procesy – jedná se o procesy, které za běhu vytvářejí další procesy.
  • Podřízené procesy – tyto procesy jsou vytvářeny jinými procesy během běhu.

Proces zahájení

Proces Init je matkou (rodičem) všech procesů v systému, je to první program, který se spustí při spuštění systému Linux; řídí všechny ostatní procesy v systému. Spouští ho samotné jádro, takže v zásadě nemá nadřazený proces.

Proces init má vždy ID procesu 1. Funguje jako adoptivní rodič pro všechny osiřelé procesy.

K nalezení ID procesu můžete použít příkaz pidof:

pidof systemd
pidof top
pidof httpd

Chcete-li najít ID procesu a ID nadřazeného procesu aktuálního shellu, spusťte:

echo $$
echo $PPID

Spuštění procesu v Linuxu

Jakmile spustíte příkaz nebo program (například cloudcmd – CloudCommander), spustí se v systému proces. Proces na popředí (interaktivní) můžete spustit následovně, bude připojen k terminálu a uživatel jej může odeslat:

cloudcmd

Práce na pozadí Linuxu

Chcete-li spustit proces na pozadí (neinteraktivní), použijte symbol &, zde proces nečte vstup od uživatele, dokud se nepřesune do popředí.

cloudcmd &
jobs

Proces můžete také poslat na pozadí tak, že jej pozastavíte pomocí [Ctrl + Z], tím se procesu odešle signál SIGSTOP, čímž se zastaví jeho operace; stane se nečinným:

tar -cf backup.tar /backups/*  #press Ctrl+Z
jobs

Chcete-li pokračovat ve spouštění výše pozastaveného příkazu na pozadí, použijte příkaz bg:

bg

Chcete-li odeslat proces na pozadí do popředí, použijte příkaz fg spolu s ID úlohy takto:

jobs
fg %1

Může se vám také líbit: Jak spustit příkaz Linux na pozadí a odpojit proces v terminálu

Stavy procesu v Linuxu

Během provádění se proces mění z jednoho stavu do druhého v závislosti na jeho prostředí/okolnostech. V Linuxu má proces následující možné stavy:

  • Spuštěné – zde buď běží (je to aktuální proces v systému), nebo je připraven ke spuštění (čeká na přiřazení k jednomu z CPU).
  • Čekání – v tomto stavu proces čeká na událost nebo na systémový prostředek. Kromě toho jádro také rozlišuje dva typy čekajících procesů; přerušitelné čekající procesy – mohou být přerušeny signály a nepřerušitelné čekající procesy – čekají přímo na hardwarové podmínky a nemohou být přerušeny žádnou událostí/signálem.
  • Zastaveno – v tomto stavu byl proces zastaven, obvykle přijetím signálu. Například proces, který se ladí.
  • Zombie – zde je proces mrtvý, byl zastaven, ale stále má záznam v tabulce procesů.

Jak zobrazit aktivní procesy v Linuxu

Existuje několik linuxových nástrojů pro zobrazení/výpis běžících procesů v systému, dva tradiční a dobře známé jsou příkazy ps a top:

1. Příkaz ps

Zobrazuje informace o výběru aktivních procesů v systému, jak je uvedeno níže:

ps 
ps -e | head 

2. nahoře – Nástroj pro monitorování systému

top je výkonný nástroj, který vám nabízí dynamický pohled na běžící systém v reálném čase, jak je znázorněno na obrázku níže:

top 

Přečtěte si toto pro další příklady použití: 12 TOP příkladů příkazů v Linuxu

3. pohledy – Nástroj pro monitorování systému

glances je relativně nový nástroj pro monitorování systému s pokročilými funkcemi:

glances

Pro komplexní návod k použití si přečtěte: Glances – pokročilý nástroj pro monitorování systému v reálném čase pro Linux

Existuje několik dalších užitečných nástrojů pro monitorování systému Linux, které můžete použít k zobrazení seznamu aktivních procesů, otevřete odkaz níže a přečtěte si o nich více:

  1. 20 nástrojů příkazového řádku pro sledování výkonu Linuxu
  2. 13 užitečnějších nástrojů pro monitorování systému Linux

Jak řídit procesy v Linuxu

Linux má také některé příkazy pro řízení procesů, jako je kill, pkill, pgrep a killall, níže je několik základních příkladů, jak je používat:

pgrep -u tecmint top
kill 2308
pgrep -u tecmint top
pgrep -u tecmint glances
pkill glances
pgrep -u tecmint glances

Chcete-li se dozvědět, jak podrobně používat tyto příkazy, jak zabít/ukončit aktivní procesy v Linuxu, otevřete následující odkazy:

  1. Průvodce příkazy Kill, Pkill a Killall k ukončení procesů Linuxu
  2. Jak najít a zabít běžící procesy v Linuxu

Všimněte si, že je můžete použít k ukončení nereagujících aplikací v Linuxu, když váš systém zamrzne.

Odesílání signálů do procesů

Základním způsobem řízení procesů v Linuxu je odesílání signálů do nich. Existuje několik signálů, které můžete odeslat procesu, abyste viděli všechny spuštěné signály:

kill -l

Chcete-li odeslat signál procesu, použijte příkazy kill, pkill nebo pgrep, které jsme zmínili dříve. Ale programy mohou reagovat na signály pouze tehdy, jsou-li naprogramovány tak, aby tyto signály rozpoznávaly.

A většina signálů je pro interní použití systémem nebo pro programátory, když píší kód. Následující signály jsou užitečné pro uživatele systému:

  • SIGHUP 1 – odesílá se do procesu, když je jeho řídící terminál uzavřen.
  • SIGINT 2 – odesílá do procesu jeho řídící terminál, když uživatel přeruší proces stisknutím [Ctrl+C].
  • SIGQUIT 3 – odesláno procesu, pokud uživatel odešle signál ukončení [Ctrl+D].
  • SIGKILL 9 – tento signál okamžitě ukončí (ukončí) proces a proces neprovede žádné operace čištění.
  • SIGTERM 15 – toto je signál ukončení programu (ve výchozím nastavení jej odešle deaktivace).
  • SIGTSTP 20 – posílá procesu jeho řídící terminál s žádostí o zastavení (terminál stop); spustí uživatel stisknutím [Ctrl+Z].

Níže jsou uvedeny příklady příkazů pro zabití pro ukončení aplikace Firefox pomocí jejího PID, jakmile zamrzne:

pidof firefox
kill 9 2687
OR
kill -KILL 2687
OR
kill -SIGKILL 2687  

Chcete-li zabít aplikaci pomocí jejího názvu, použijte pkill nebo killall takto:

pkill firefox
killall firefox 

Změna priority procesu Linux

V systému Linux mají všechny aktivní procesy prioritu a určitou pěknou hodnotu. Procesy s vyšší prioritou obvykle získají více času CPU než procesy s nižší prioritou.

Systémový uživatel s právy root to však může ovlivnit pomocí příkazů nice a renice.

Z výstupu příkazu top ukazuje NI hodnotu procesu nice:

top  

Pomocí příkazu nice nastavte pro proces hodnotu nice. Mějte na paměti, že běžní uživatelé mohou procesům, které vlastní, přiřadit hezkou hodnotu od nuly do 20.
Pouze uživatel root může používat záporné hodnoty nice.

Chcete-li renice prioritu procesu, použijte příkaz renice takto:

renice +8  2687
renice +8  2103

Podívejte se na naše užitečné články o tom, jak spravovat a ovládat procesy Linuxu.

  1. Linux Process Management: Boot, Shutdown a vše mezi tím
  2. Najděte 15 nejlepších procesů podle využití paměti pomocí „top“ v dávkovém režimu
  3. Najděte nejběžnější procesy podle nejvyššího využití paměti a CPU v Linuxu
  4. Jak najít název procesu pomocí čísla PID v Linuxu

To je prozatím vše! Máte nějaké dotazy nebo další nápady, podělte se o ně s námi prostřednictvím formuláře pro zpětnou vazbu níže.