Obvyklým stylem provádění příkazu na linuxovém terminálu je jednoduše jej spustit a počkat, až se ladně ukončí. Jakmile příkaz skončí, můžete pokračovat v provádění dalších příkazů za sebou. Tomu se říká spouštění příkazů v popředí. Jak slovo napovídá, můžete vizuálně vidět výstup příkazu na terminálu.
Někdy však spuštění příkazů v popředí může představovat řadu problémů. Ukončení příkazu může trvat příliš dlouho, což způsobí, že ztrácíte drahocenný čas a jindy může být zcela připojen k relaci shellu a zůstanete uvězněni.
V takových případech je nejlepší volbou spuštění příkazu na pozadí. Můžete odeslat příkaz(y) na pozadí, když současně spouštíte jiné příkazy na popředí. To zvyšuje efektivitu práce na terminálu a šetří váš čas.
V této příručce se zaměříme na to, jak můžete spouštět příkazy nebo skripty shellu Linux na pozadí.
Spuštění příkazu shellu na pozadí pomocí znaménka (&)
Chcete-li spustit příkaz nebo skript na pozadí, ukončete jej znakem ampersand (&) na konci, jak je znázorněno.
$ příkaz &
POZNÁMKA:Ukončení příkazu znakem ampersand od vás příkaz neodpojí. Pouze jej odešle na pozadí aktuálního shellu, který používáte, příkaz bude stále tisknout výstup do STDOUT nebo STDERR, což vám zabrání ve spouštění dalších příkazů na terminálu.
Lepším přístupem je přesměrovat příkaz na /dev/null a později připojit znak ampersand na konec, jak je znázorněno
$ příkaz &>/dev/null &
Chcete-li potvrdit, že byl příkaz odeslán na pozadí, spusťte příkaz jobs.
Chcete-li ukončit proces na pozadí, spusťte příkaz kill následovaný PID procesu následovně. Volba -9 proces okamžitě ukončí.
$ kill -9 138314
Spuštění příkazu nebo skriptu shellu na pozadí pomocí příkazu nohup
Dalším způsobem, jak spustit příkaz na pozadí, je použití příkazu nohup. Příkaz nohup, zkratka pro no hang up, je příkaz, který udržuje proces spuštěný i po opuštění shellu.
Dělá to tak, že blokuje procesy v přijímání signálu SIGHUP (Signal Hang UP), což je signál, který je obvykle odesílán procesu, když opouští terminál.
Chcete-li odeslat příkaz nebo skript na pozadí a ponechat jej spuštěný, použijte syntaxi:
$ nohup příkaz &>/dev/null &
$ nohup shell-script.sh &>/dev/null &
Například,
$ nohup ping google.com &>/dev/null &
Opět můžete ověřit, že příkaz běží na pozadí pomocí příkazu:
$ jobs
Závěr
V této příručce jsme se zabývali dvěma způsoby spouštění příkazů nebo skriptů shellu na pozadí. Viděli jsme, jak můžete spouštět příkazy na pozadí pomocí &sign a příkazu nohup.
Přečtěte si také :Linuxový příkaz Zip a rozbalení s příklady