Sådan starter du Linux-kommando i baggrunden og løsner processen i terminalen


I denne vejledning skal vi fremhæve et simpelt, men alligevel vigtigt koncept i proceshåndtering i et Linux-system, det er hvordan man fuldstændigt løsner en proces fra dens styrende terminal.

Når en proces er forbundet med en terminal, kan der opstå to problemer:

  1. din styrende terminal er fyldt med så mange outputdata og fejl/diagnosticeringsmeddelelser.
  2. i tilfælde af at terminalen er lukket, afsluttes processen sammen med dens underordnede processer.

For at håndtere disse to problemer skal du helt fjerne en proces fra en kontrollerende terminal. Før vi rent faktisk løser problemet, skal vi kort dække, hvordan man kører processer i baggrunden.

Sådan startes en Linux-proces eller kommando i baggrunden

Hvis en proces allerede er i eksekvering, f.eks. Eksemplet på tar-kommandoen nedenfor, skal du blot trykke på Ctrl + Z for at stoppe den og derefter indtaste kommandoen bg for at fortsætte med dens udførelse i baggrund som job.

Du kan se alle dine baggrundsjob ved at skrive job . Imidlertid er dens stdin, stdout, stderr stadig forbundet med terminalen.

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

Du kan også køre en proces direkte fra baggrunden ved hjælp af tegnet ampersand, & .

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

Se eksemplet nedenfor, selvom tar-kommandoen blev startet som et baggrundsjob, blev der stadig sendt en fejlmeddelelse til terminalen, hvilket betyder, at processen stadig er forbundet til den styrende terminal.

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

Hold Linux-processer kørende, når terminalen er afsluttet

Vi bruger kommandoen afvise, den bruges efter at en proces er startet og sat i baggrunden, det er at fjerne et shelljob fra shellens aktive listejob, derfor bruger du ikke fg , bg kommandoer på det pågældende job længere.

Derudover, når du lukker den kontrollerende terminal, vil jobbet ikke hænge eller sende en SIGHUP til noget underjob.

Lad os se på nedenstående eksempel på brug af diswon bash indbygget funktion.

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

Du kan også bruge kommandoen nohup , som også gør det muligt for en proces at fortsætte med at køre i baggrunden, når en bruger forlader en shell.

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

Fjern en Linux-proces fra styringsterminalen

Derfor, for at fjerne en proces fuldstændigt fra en kontrollerende terminal, skal du bruge kommandoformatet nedenfor, dette er mere effektivt til grafiske brugergrænseflade (GUI) applikationer såsom firefox:

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

I Linux er/dev/null en speciel enhedsfil, der afskriver (slipper af) alle data, der er skrevet til den. I kommandoen ovenfor læses input fra, og output sendes til/dev/null.

Som en afsluttende bemærkning, forudsat at en proces er forbundet til en styrende terminal, som bruger, vil du se flere outputlinjer af procesdataene samt fejlmeddelelser på din terminal. Igen, når du lukker en kontrollerende terminal, afsluttes din proces og underordnede processer.

Vigtigere er det, at hvis du har spørgsmål eller bemærkninger om emnet, skal du kontakte os ved hjælp af nedenstående kommentarformular.