Odeslat proces na pozadí Linuxu

Send Process Background Linux



Při práci s grafickými desktopovými prostředími si málokdy děláme starosti s procesy na pozadí. Pokud v popředí běží proces, můžeme rychle vytvořit další okno terminálu a pokračovat v naší práci.

Pokud se však nacházíte v nezpracovaném koncovém shellu, jako je SSH, budete často cítit obavy z procesů, které zabírají a blokují shell, dokud nejsou dokončeny, zejména u dlouhodobých úloh. Právě zde vstupuje do hry koncept procesů na pozadí a v popředí.







Tento tutoriál bude diskutovat o tom, jaké jsou procesy na pozadí a v popředí, včetně jejich vytváření a správy v Linuxu.



Co je to proces?

Dovolte mi začít na základní úrovni: co je to proces?



V Linuxu je proces instancí programu. Obvykle to znamená, že jakýkoli příkaz nebo spustitelný soubor v shellu je proces.





Existují hlavně dva typy procesů:

  • Procesy v popředí
  • Procesy na pozadí

Procesy v popředí jsou hlavně typické aplikace, které spouštíme a interagujeme s nimi. Příkladem může být správce souborů nautilus v Gnome. Ve většině případů můžeme spouštět procesy v popředí z prostředí shellu nebo desktopu.



Na druhou stranu procesy na pozadí běží na pozadí a nevyžadují žádný vstup ani interakci od uživatele. Příkladem může být jakýkoli typický démon Linuxu.

Jak spustit proces na pozadí

Předpokládejme, že máme proces, který během běhu zabírá relaci prostředí Shell a brání nám ve spouštění příkazů, dokud se neukončí.

Pokud například ve skořápce spustíme prohlížeč Firefox, bude relaci zabírat až do ukončení procesu.

$Firefox


Jak vidíte, pokud běží Firefox, výzva shellu není k dispozici a nemůžeme provádět žádné další příkazy.

Abychom to vyřešili, můžeme to udělat dvěma způsoby:

1: Použití Ampersandu (&)

První metodou je použití znaku & znak. To říká shellu, aby spustil jakýkoli příkaz předcházející ampersandu na pozadí.

Příklad:

Firefox&

V takovém případě se proces spustí na pozadí a vytvoří se jako nová výzva prostředí, která nám umožní pokračovat ve spouštění příkazů.

Poskytuje také dva číselné identifikátory. První v hranatých závorkách je ID úlohy, zatímco další je ID procesu.

2: Pomocí příkazu CTRL + Z, bg.

Další metodou, kterou můžete použít k vložení procesu na pozadí, je použít zkratku CTRL + Z. Tím se zastaví proces z blokování shellu. Poté jej můžete pomocí příkazu bg posunout na pozadí.

Začněte například spuštěním Firefoxu jako:

$Firefox

Když je proces spuštěn, stiskněte CTRL + Z. Tím se vrátí výzva k shellu. Nakonec zadejte příkaz bg a proces posuňte na pozadí.

Jak zobrazit procesy na pozadí

Chcete -li zobrazit a spravovat procesy na pozadí, použijte v shellu příkaz jobs. To zobrazí úlohy na pozadí v aktuální relaci terminálu.

Například:

$pracovní místa

Příklad výstupu úloh na pozadí:

Chcete -li převést proces běžící na pozadí do popředí, použijte příkaz fg následovaný ID úlohy.

Abychom například dostali úlohu Firefoxu do popředí, použijeme příkaz:

$fg %1

Chcete -li znovu vložit pozadí, stiskněte CTRL + Z a poté příkaz bg.

Jak zajistit, aby byl proces po skořápce trvalý

Když spouštíte procesy na pozadí a vaše relace shellu zemře, všechny procesy s ní spojené se ukončí, což může být problematické, zvláště pokud se jedná o relaci SSH.

Pokud však používáte terminálový multiplexor, jako je tmux nebo obrazovka, není to příliš velký problém, protože v takovém případě můžete relaci jednoduše znovu připojit.

Pokud však spouštíte relaci prostředí bez multiplexeru, můžete použít příkaz nohup.

Příkaz nohup je imunní vůči zavěšení a může ignorovat signál SIGHUP odeslaný do procesu.

Pokud tedy spustíte příkaz s nohup, pokračuje v běhu, i když relace shellu omylem zemře.

Chcete -li například spustit Firefox s nohup, použijte příkaz:

nohupFirefox&

Tím se proces spustí na pozadí, protože přetrvává ukončení shellu.

Můžete spustit novou relaci terminálu a zobrazit úlohy na pozadí. Uvidíte, že proces stále běží na pozadí.

Závěr

V tomto kurzu jsme diskutovali o různých způsobech spouštění a odesílání procesů na pozadí v Linuxu. Také jsme se zabývali tím, jak přenést proces na pozadí na pozadí a přetrvávat zavěšení po ukončení shellu.