Kako zagnati ukaz Linux v ozadju in ločiti postopek v terminalu


V tem priročniku bomo razkrili preprost, a pomemben koncept pri obdelavi procesov v sistemu Linux, to je, kako v celoti ločiti proces od njegovega nadzornega terminala.

Ko je postopek povezan s terminalom, lahko pride do dveh težav:

  1. vaš nadzorni terminal je napolnjen s toliko izhodnimi podatki in sporočili o napakah/diagnostiki.
  2. v primeru, da je terminal zaprt, se postopek skupaj z njegovimi podrejenimi procesi zaključi.

Če želite rešiti ti dve težavi, morate postopek popolnoma ločiti od nadzornega terminala. Preden se dejansko lotimo reševanja problema, na kratko predstavimo, kako izvajati procese v ozadju.

Kako zagnati Linux proces ali ukaz v ozadju

Če se postopek že izvaja, na primer spodnji primer ukaza tar, preprosto pritisnite Ctrl + Z , da ga ustavite, nato vnesite ukaz bg , da nadaljujete z izvajanjem v ozadje kot služba.

Vsa opravila v ozadju si lahko ogledate tako, da vnesete opravila . Vendar pa so njegovi stdin, stdout, stderr še vedno priključeni na terminal.

$ tar -czf home.tar.gz .
$ bg
$ jobs

Postopek lahko zaženete tudi neposredno iz ozadja z uporabo znaka ampersand, & .

$ tar -czf home.tar.gz . &
$ jobs

Oglejte si spodnji primer, čeprav je bil ukaz tar zagnan kot opravilo v ozadju, je bilo na terminal še vedno poslano sporočilo o napaki, kar pomeni, da je postopek še vedno povezan z nadzornim terminalom.

$ tar -czf home.tar.gz . &
$ jobs

Po izhodu iz terminala naj se procesi Linuxa izvajajo

Uporabili bomo ukaz disown, ki se uporablja po tem, ko se postopek zažene in postavi v ozadje, njegovo delo je odstraniti opravilo lupine iz aktivnih opravil seznama lupine, zato ne boste uporabljali fg , bg ukaze za to določeno delo več.

Poleg tega, ko zaprete krmilni terminal, opravilo ne bo obesilo niti poslalo VZPISA na nobeno podrejeno opravilo.

Oglejmo si spodnji primer uporabe vgrajene funkcije diswon bash.

$ sudo rsync Templates/* /var/www/html/files/ &
$ jobs
$ disown  -h  %1
$ jobs

Uporabite lahko tudi ukaz nohup , ki omogoča tudi nadaljevanje postopka v ozadju, ko uporabnik zapusti lupino.

$ nohup tar -czf iso.tar.gz Templates/* &
$ jobs

Ločite procese Linuxa iz nadzornega terminala

Če želite torej postopek popolnoma ločiti od nadzornega terminala, uporabite spodnjo obliko ukaza, kar je bolj učinkovito za aplikacije grafičnega uporabniškega vmesnika (GUI), kot je Firefox:

$ firefox </dev/null &>/dev/null &

V Linuxu je/dev/null posebna datoteka naprave, ki odpiše (znebi se) vse podatke, ki so ji zapisani, v zgornjem ukazu se bere vhod in izhod pošlje v/dev/null.

Kot zaključna opomba, če je postopek povezan s krmilnim terminalom, boste kot uporabnik videli več izhodnih vrstic podatkov procesa in sporočil o napakah na vašem terminalu. Ko zaprete nadzorni terminal, se vaš proces in podrejeni procesi zaključijo.

Pomembno je, da nas za kakršna koli vprašanja ali pripombe v zvezi s to zadevo dosežete s pomočjo spodnjega obrazca za komentar.