Pošlite proces na pozadí Linux

Send Process Background Linux



Pri práci s grafickými desktopovými prostrediami si len málokedy robíme starosti s procesmi na pozadí. Ak máme v popredí spustený proces, môžeme rýchlo vytvoriť ďalšie okno terminálu a pokračovať v práci.

Ak sa však nachádzate v surovom terminálovom plášti, akým je napríklad SSH, budete často pociťovať obavy nad procesmi, ktoré zaberajú a blokujú shell, kým nie sú dokončené, najmä pri dlho bežiacich úlohách. Tu vstupuje do hry koncept procesov na pozadí a v popredí.







Tento tutoriál bude diskutovať o tom, čo sú procesy na pozadí a na popredí, vrátane ich vytvárania a správy v systéme Linux.



Čo je to proces?

Dovoľte mi začať na základnej úrovni: čo je to proces?



V systéme Linux je proces inštanciou programu. Obvykle to znamená, že akýkoľvek príkaz alebo spustiteľný súbor v shelli je proces.





Existujú hlavne dva typy procesov:

  • Procesy v popredí
  • Procesy na pozadí

Procesy v popredí sú hlavne typické aplikácie, ktoré spúšťame a interagujeme s nimi. Príkladom môže byť správca súborov nautilus v Gnome. Vo väčšine prípadov môžeme procesy v popredí spustiť z prostredia shell alebo desktopu.



Na druhej strane, procesy na pozadí bežia na pozadí a nevyžadujú žiadny vstup alebo interakciu od používateľa. Príkladom by mohol byť akýkoľvek typický démon Linuxu.

Ako spustiť proces na pozadí

Predpokladajme, že máme proces, ktorý za behu zaberá reláciu shellu a bráni nám vykonávať príkazy, kým sa neukončí.

Ak napríklad spustíme prehliadač Firefox v prostredí Shell, bude reláciu vykonávať až do ukončenia procesu.

$firefox


Ako vidíte, pokiaľ je Firefox spustený, výzva shellu nie je k dispozícii a nemôžeme vykonať žiadne ďalšie príkazy.

Aby sme to vyriešili, môžeme to urobiť dvoma spôsobmi:

1: Použitie ampéra (&)

Prvá metóda je použitie znaku & znaku. To hovorí shellu, aby spustil akýkoľvek príkaz, ktorý predchádza znaku ampersand na pozadí.

Príklad:

firefox&

V takom prípade sa proces spustí na pozadí a zobrazí sa ako nová výzva shellu, ktorá nám umožní pokračovať vo vykonávaní príkazov.

Poskytuje tiež dva číselné identifikátory. Prvý v hranatých zátvorkách je Job ID, zatiaľ čo ďalší je ID procesu.

2: Použitie príkazu CTRL + Z, bg.

Ďalšou metódou, ktorú môžete použiť na vloženie procesu na pozadie, je použiť skratku CTRL + Z. To zastaví proces v blokovaní shellu. Potom ho môžete pomocou príkazu bg vytlačiť na pozadie.

Začnite napríklad spustením prehliadača Firefox ako:

$Firefox

Kým je proces spustený, stlačte kombináciu klávesov CTRL + Z. Tým sa vráti výzva vášho shellu. Nakoniec zadajte príkaz bg, aby sa proces posunul na pozadí.

Ako zobraziť procesy na pozadí

Ak chcete zobrazovať a spravovať procesy na pozadí, použite príkaz jobs v shelle. To ukáže úlohy na pozadí v aktuálnej terminálovej relácii.

Napríklad:

$zamestnania

Príklad výstupu úloh na pozadí:

Ak chcete proces spustený na pozadí presunúť do popredia, použite príkaz fg, za ktorým nasleduje ID úlohy.

Napríklad na to, aby sme úlohu Firefoxu dostali do popredia, použijeme príkaz:

$fg %1

Ak chcete znova vložiť pozadie, stlačte kombináciu klávesov CTRL + Z a potom príkaz bg.

Ako urobiť proces perzistentným po smrti škrupiny

Keď spustíte procesy na pozadí a vaša relácia shellu zomrie, všetky procesy s ňou súvisiace sa ukončia, čo môže byť problematické, najmä ak ide o reláciu SSH.

Ak však používate terminálový multiplexor, ako je tmux alebo obrazovka, nie je to príliš veľký problém, pretože v takom prípade môžete reláciu jednoducho znova pripojiť.

Ak však spustíte reláciu shellu bez multiplexora, môžete použiť príkaz nohup.

Príkaz nohup je odolný voči zaveseniu a môže ignorovať signál SIGHUP odoslaný do procesu.

Ak teda spustíte príkaz s nohup, bude pokračovať v spustení, aj keď relácia shellu omylom zomrie.

Ak napríklad chcete spustiť Firefox s nohup, použite príkaz:

nohupFirefox&

Tento proces sa spustí na pozadí a bude pretrvávať aj ukončenie shellu.

Môžete spustiť novú reláciu terminálu a zobraziť úlohy na pozadí. Uvidíte, že proces stále beží na pozadí.

Záver

V tomto návode sme diskutovali o rôznych spôsoboch spustenia a odoslania procesov na pozadí v systéme Linux. Tiež sme sa zaoberali tým, ako preniesť proces na pozadí na pozadie a vydržať zavesiť po ukončení shellu.