Kā sākt Linux komandu fonā un atvienot procesu terminālā


Šajā ceļvedī mēs parādīsim vienkāršu, bet svarīgu procesu apstrādes jēdzienu Linux sistēmā, tas ir, kā pilnībā atdalīt procesu no tā kontrolējošā termināla.

Ja process ir saistīts ar termināli, var rasties divas problēmas:

  1. jūsu kontrolējošais terminālis ir piepildīts ar tik daudz izejas datu un kļūdu/diagnostikas ziņojumu.
  2. gadījumā, ja termināls ir slēgts, process kopā ar tā pakārtotajiem procesiem tiks pārtraukts.

Lai risinātu šos divus jautājumus, jums ir pilnībā jāatvieno process no kontrolējošā termināla. Pirms mēs patiešām virzāmies uz problēmas risināšanu, īsi apskatīsim, kā procesus vadīt fonā.

Kā sākt Linux procesu vai komandu fonā

Ja process jau tiek izpildīts, piemēram, zemāk redzamais tar komandas piemērs, vienkārši nospiediet Ctrl + Z , lai to apturētu, pēc tam ievadiet komandu bg , lai turpinātu tā izpildi fons kā darbs.

Visus fona darbus varat apskatīt, ierakstot job . Tomēr tā stdin, stdout, stderr joprojām ir pievienoti terminālim.

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

Jūs varat arī palaist procesu tieši no fona, izmantojot zīmi "un", & .

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

Apskatiet zemāk redzamo piemēru, lai gan darvas komanda tika sākta kā fona darbs, tomēr terminālim joprojām tika nosūtīts kļūdas ziņojums, kas nozīmē, ka process joprojām ir saistīts ar kontrolējošo termināli.

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

Turpiniet Linux procesus darboties pēc iziešanas no termināļa

Mēs izmantosim komandu noraidīt, tā tiek izmantota pēc tam, kad process ir palaists un ievietots otrajā plānā. Tas ir noņemt čaulas darbu no čaulas aktīvajiem saraksta darbiem, tādēļ neizmantosiet , bg vairs nedod komandas šim konkrētajam darbam.

Turklāt, aizverot kontrolterminālu, darbs netiks pakārts un nenosūtīs SIGHUP nevienam bērna darbam.

Apskatīsim zemāk redzamo piemēru par diswon bash iebūvētās funkcijas izmantošanu.

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

Varat arī izmantot komandu nohup , kas arī ļauj procesu turpināt darboties fonā, kad lietotājs iziet no čaumalas.

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

Atvienojiet Linux procesus no vadības termināļa

Tāpēc, lai pilnībā atdalītu procesu no kontrolējošā termināļa, izmantojiet zemāk esošo komandu formātu, tas ir efektīvāk grafisko lietotāja interfeisa (GUI) lietojumprogrammām, piemēram, Firefox:

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

Linux operētājsistēmā/dev/null ir īpašs ierīces fails, kas noraksta (atbrīvojas) no visiem tajā ierakstītajiem datiem, iepriekš minētajā komandā ievade tiek nolasīta un izeja tiek nosūtīta uz/dev/null.

Kā nobeiguma piezīme, ja process ir savienots ar kontrolējošu termināli, kā lietotājs savā terminālā redzēsiet vairākas procesa datu izejas rindas, kā arī kļūdu ziņojumus. Atkal, aizverot kontrolējošo termināli, jūsu process un pakārtotie procesi tiks izbeigti.

Svarīgi ir tas, ka par visiem jautājumiem vai piezīmēm par šo tēmu sazinieties ar mums, izmantojot zemāk esošo komentāru formu.