Android

Hoe Linux-commando's op de achtergrond uit te voeren

Vim Text Editor Basics - How to Use Vim on Linux / Mac / Unix (Beginners Guide on Ubuntu 20.04)

Vim Text Editor Basics - How to Use Vim on Linux / Mac / Unix (Beginners Guide on Ubuntu 20.04)

Inhoudsopgave:

Anonim

Wanneer u een opdracht in de terminal uitvoert, moet u meestal wachten tot de opdracht is voltooid voordat u een andere kunt invoeren. Dit wordt het uitvoeren van de opdracht in het voorgrond- of voorgrondproces genoemd. Wanneer een proces op de voorgrond wordt uitgevoerd, bezet het uw shell en kunt u ermee communiceren via de invoerapparaten.

Wat als de opdracht lang duurt om te voltooien en u ondertussen andere opdrachten wilt uitvoeren? U hebt verschillende opties tot uw beschikking. De meest voor de hand liggende en eenvoudigste optie is om een ​​nieuwe shell-sessie te starten en de opdracht erin uit te voeren. Een andere optie is om de opdracht op de achtergrond uit te voeren.

Een achtergrondproces is een proces / opdracht die wordt gestart vanaf een terminal en op de achtergrond wordt uitgevoerd, zonder interactie van de gebruiker., we zullen praten over de achtergrondprocessen is Linux. We laten je zien hoe je een commando op de achtergrond start en hoe je het proces kunt laten draaien nadat de shell-sessie is afgesloten.

Voer een Linux-commando op de achtergrond uit

Om een ​​opdracht op de achtergrond uit te voeren, voegt u het ampersand-symbool ( & ) toe aan het einde van de opdracht:

command &

De shell-taak-ID (tussen haakjes) en proces-ID worden afgedrukt op de terminal:

25177

U kunt meerdere processen tegelijkertijd op de achtergrond uitvoeren.

Het achtergrondproces blijft berichten schrijven naar de terminal van waaruit u de opdracht hebt aangeroepen. Gebruik de volgende syntaxis om de stdout en stderr berichten te onderdrukken:

command > /dev/null 2>&1 &

>/dev/null 2>&1 betekent stdout omleiden naar /dev/null en stderr naar stdout .

Gebruik het hulpprogramma jobs om de status van alle gestopt en achtergrondtaken in de huidige shell-sessie weer te geven:

jobs -l

De uitvoer omvat het taaknummer, proces-ID, taakstatus en de opdracht waarmee de taak is gestart:

+ 25177 Running ping google.com &

Gebruik de opdracht fg om een ​​achtergrondproces naar de voorgrond te brengen:

fg

fg %1

Om het achtergrondproces te beëindigen, gebruikt u de opdracht kill gevolgd door de proces-ID:

kill -9 25177

Verplaats een voorgrondproces naar achtergrond

Een lopend voorgrondproces op de achtergrond verplaatsen:

  1. Stop het proces door Ctrl+Z typen. Verplaats het gestopte proces naar de achtergrond door bg typen.

Houd achtergrondprocessen actief nadat een shell is afgesloten

Als je verbinding wegvalt of als je uitlogt bij de shell-sessie, worden de achtergrondprocessen beëindigd. Er zijn verschillende manieren om het proces actief te houden nadat de interactieve shell-sessie is beëindigd.

Een manier is om de taak uit de taakcontrole van de shell te verwijderen met behulp van de ingebouwde shell ingebouwd:

disown

disown %1

Bevestig dat de taak uit de tabel met actieve taken wordt verwijderd met de jobs -l . Gebruik de opdracht ps aux om alle actieve processen weer te geven, inclusief de verstoten.

Een andere manier om een ​​proces actief te houden na de shell-uitgang is door nohup te gebruiken.

De opdracht nohup voert een ander programma uit dat is opgegeven als argument en negeert alle SIGHUP (hangup) signalen. SIGHUP is een signaal dat naar een proces wordt verzonden wanneer de controlerende terminal is gesloten.

Typ het volgende om een ​​opdracht op de achtergrond uit te voeren met de opdracht nohup :

nohup command &

De opdrachtuitvoer wordt doorgestuurd naar het bestand nohup.out .

nohup: ignoring input and appending output to 'nohup.out'

alternatieven

Er zijn een aantal programma's waarmee u meerdere interactieve sessies tegelijkertijd kunt houden.

Scherm

Screen of GNU Screen is een terminal-multiplexerprogramma waarmee u een schermsessie kunt starten en een willekeurig aantal vensters (virtuele terminals) binnen die sessie kunt openen. Processen die in Scherm worden uitgevoerd, blijven actief als hun venster niet zichtbaar is, zelfs als u de verbinding verliest.

tmux

Tmux is een modern alternatief voor GNU-scherm. Met Tmux kunt u ook een sessie maken en meerdere vensters binnen die sessie openen. Tmux-sessies zijn persistent, wat betekent dat programma's die in Tmux worden uitgevoerd, blijven draaien, zelfs als u de terminal sluit.

Conclusie

Als u een opdracht op de achtergrond wilt uitvoeren, neemt u & op aan het einde van de opdracht.

Wanneer u een opdracht op de achtergrond uitvoert, hoeft u niet te wachten totdat deze is voltooid voordat u een andere kunt uitvoeren.

nohup fg bg jobs disown terminal