Kaip paleisti „Linux“ komandą fone ir atjungti procesą terminale


Šiame vadove mes atskleisime paprastą, tačiau svarbią procesų tvarkymo „Linux“ sistemoje koncepciją, tai yra, kaip visiškai atsieti procesą nuo jo valdančio terminalo.

Kai procesas yra susietas su terminalu, gali kilti dvi problemos:

  1. jūsų valdymo terminalas užpildytas tiek daug išvesties duomenų ir klaidų/diagnostikos pranešimų.
  2. tuo atveju, jei terminalas bus uždarytas, procesas kartu su antriniais procesais bus nutrauktas.

Norėdami išspręsti šias dvi problemas, turite visiškai atsieti procesą nuo valdančio terminalo. Prieš pradėdami spręsti problemą, trumpai apžvelkime, kaip vykdyti procesus fone.

Kaip pradėti Linux procesą ar komandą fone

Jei procesas jau vykdomas, pvz., Žemiau pateiktas tar komandos pavyzdys, tiesiog paspauskite Ctrl + Z , kad jį sustabdytumėte, tada įveskite komandą bg , kad tęstumėte jo vykdymą fonas kaip darbas.

Visus savo foninius darbus galite peržiūrėti įvesdami job . Tačiau jo stdin, stdout, stderr vis dar yra prijungti prie terminalo.

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

Taip pat galite paleisti procesą tiesiai iš fono naudodami ženklą „ampersand“, „“ ir „“.

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

Pažvelkite į žemiau pateiktą pavyzdį, nors komanda tar buvo pradėta naudoti kaip foninė užduotis, terminalui vis tiek buvo išsiųstas klaidos pranešimas, o tai reiškia, kad procesas vis dar yra prijungtas prie valdančio terminalo.

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

Laikykite „Linux“ procesus veikiančius išėjus iš terminalo

Mes naudosime komandą atsisakyti, ji naudojama paleidus procesą ir patekus į antrą planą. Tai yra pašalinti apvalkalo užduotį iš aktyvių apvalkalo sąrašo užduočių, todėl nenaudosite fg , bg komandos jau atlieka tą konkretų darbą.

Be to, uždarius kontrolinį terminalą, darbas nebus pakabintas ir neišsiųstas SIGHUP į jokius vaiko darbus.

Pažvelkime į žemiau pateiktą „diswon bash“ integruotos funkcijos naudojimo pavyzdį.

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

Taip pat galite naudoti komandą nohup , kuri taip pat įgalina procesą tęsti fone, kai vartotojas išeina iš apvalkalo.

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

Atjunkite „Linux“ procesus nuo valdymo terminalo

Todėl, norėdami visiškai atsieti procesą nuo valdančio terminalo, naudokite toliau pateiktą komandų formatą, tai yra efektyviau grafinių vartotojo sąsajų (GUI) programoms, tokioms kaip „Firefox“:

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

„Linux“ sistemoje/dev/null yra specialus įrenginio failas, kuris nurašo (atsikrato) visus į jį įrašytus duomenis, aukščiau esančioje komandoje įvestis nuskaitoma, o išvestis siunčiama į/dev/null.

Kaip baigiamoji pastaba, su sąlyga, kad procesas yra prijungtas prie valdymo terminalo, kaip vartotojas, jūs matysite keletą proceso duomenų išvesties linijų, taip pat klaidų pranešimus savo terminale. Vėlgi, uždarius kontrolinį terminalą, jūsų ir antriniai procesai bus nutraukti.

Svarbu, kad iškilus klausimams ar pastaboms šia tema susisiekite su mumis naudodamiesi toliau pateikta komentarų forma.