Computers

Voer het proces uit in de Linux-terminal op de achtergrond

Schrijver: Peter Berry
Datum Van Creatie: 16 Juli- 2021
Updatedatum: 9 Kunnen 2024
Anonim
Linux Foreground and Background Process Management
Video: Linux Foreground and Background Process Management

Inhoud

Ik ben een softwareontwikkelaar met een grote interesse in data-analyse en statistiek.

Als je op mij lijkt en je begon een hekel te krijgen aan het klikken op pictogrammen om projecten te starten, dan start je ze vanuit de shell. Ik open bijvoorbeeld mijn terminal of heb een open terminal en voer de VLC-opdracht uit. Met deze opdracht wordt de VLC-mediaspeler geopend als u deze hebt geïnstalleerd. Maar nu wordt het proces op de voorgrond uitgevoerd op uw geopende terminal. De levenscyclus van VLC is nauw verbonden met de terminal en blokkeert andere acties op de terminal. Als je geen VLC hebt, gebruik dan bijvoorbeeld de ‘gnome-calculator’.

Wanneer u het proces op deze manier start, ziet u dat de shell wacht (blokkeert) totdat het programma is voltooid of wordt beëindigd.

Als u de terminal sluit, wordt u door de terminal gevraagd: “Er loopt nog steeds een proces in deze terminal. Het sluiten van de terminal zal het doden ”. U kunt de terminal annuleren of sluiten. Dit komt doordat het proces dat u startte enkele dingen van de shell erft (stdin, stdout, enz.). Dit maakt het proces gebonden aan die terminal.


Wanneer u uw terminal sluit, ontvangt de shell een SIGHUP. Het stuurt ook een SIGHUP naar het proces dat u hebt gestart. Hiermee wordt het proces beëindigd.

Laten we aannemen dat u het proces niet wilt beëindigen, maar dat u deze terminal niet meer nodig heeft of nodig heeft. Of misschien wilt u de terminal blijven gebruiken voor andere taken.

De ‘&’ aan uw opdracht toevoegen

In het geval van VLC gaat het proces naar de achtergrond en kunt u de terminal naar eigen inzicht blijven gebruiken. U krijgt opnieuw een shell-prompt. Vaak ga ik gewoon verder van daaruit of maak ik de terminal leeg en gebruik deze voor andere taken of start ik andere processen.

Als je de terminal sluit door met de muis op de sluitknop (x) te drukken of gebruik Shift + Ctrl + W, dan stopt het alle processen die je in die terminal hebt gestart. Dit is min of meer hetzelfde probleem als voorheen, maar deze keer vraagt ​​de terminal je niet om dit te doen, het doodt het programma ('s) gewoon onmiddellijk.

Als u het exit-commando in de terminal typt of sluit met de sneltoets Ctrl + D, wordt de terminal gesloten, maar de lopende processen blijven actief. Dit was de eerste oplossing die ik probeerde. Ik gebruik het nog steeds vrij vaak, maar er zijn er nog meer. Sommige hebben andere voordelen of bieden u indien nodig meer opties.


$ vlc &

Het toevoegen van het ‘& disown’ aan Uw Commando

Dit (& verwerpen) lijkt hetzelfde te doen als het toevoegen van de "&" aan het commando. Maar wanneer u disown toevoegt, wordt het proces verwijderd uit de lijst met taken van de shell. Het proces is nog steeds verbonden met de terminal, maar ontvangt geen SIGHUP.

Een van de nadelen van disown is dat het bash-specifiek is. Als u vaak verschillende systemen gebruikt die deze opdracht niet kennen, kan het lastig zijn. Aangezien de meeste commando's na een tijdje bijna reflexachtig zijn, zou je dit commando kunnen typen op systemen waar het geen nut heeft. Maar voor mij is dit niet echt een issue, maar hou er rekening mee.

$ vlc & disown

Gebruik ‘setsid’ in uw Shell Command

Een opdracht die met setsid wordt uitgevoerd, wordt geopend en / of wijst een nieuwe sessie-ID toe aan het proces. Deze sessie-id verschilt van de sessie-id van de huidige actieve terminal. Een boom van alle processen (uitvoerende instanties van de programma's) die op uw systeem draaien, zou laten zien dat het proces met een nieuwe sessie-ID begint bij de wortel van de boomstructuur, niet als een vertakking van het terminalproces.


Met setsid kun je de uitvoer van het proces waarmee je later bent begonnen, niet controleren. Dit is iets dat je kunt doen met zoiets als nohup en screen. Met screen is er een bijgevoegde schermsessie aan het proces en met nohup kun je het outputbestand controleren. Maar is dit iets dat u nodig heeft of wilt voor het proces dat u start? Soms is dit het geval, maar vaak hoeft u alleen het programma uit te voeren en dat is het dan.

U kunt het ook naar een uitvoerbestand laten schrijven wanneer u setsid gebruikt.

$ setsid vlc

Gebruik ‘nohup’ met uw opdracht

Nohup zal het proces scheiden van de terminal. Vanwege de verbroken verbinding ontvangt het geen SIGHUP, daarom wordt het nohup genoemd. Als u de terminal sluit, blijft het proces lopen totdat u deze sluit.

Wanneer de terminal open is, staat de taak nog steeds op de voorgrond en nog steeds onder de taakcontrole van de shell. Dit betekent dat als u alleen nohup gebruikt, u die terminal nog steeds niet voor andere taken kunt gebruiken. Dus je moet het combineren met een ‘&’.

$ nohup vlc

$ nohup vlc &

Zoals je ziet, sluit / negeert het de invoer en voegt het de uitvoer toe aan een nohup.out. Het gebruik van nohup.out zorgt ervoor dat het proces nog steeds zijn uitvoer kan schrijven, zelfs wanneer de terminal eindigt / sluit.

Linux-basisopdrachten, ubuntu

Het dialoogvenster Uitvoeren

U kunt er ook voor kiezen om het proces niet vanaf een terminal te starten. Het is mogelijk om de prompt Uitvoeren te gebruiken. Druk op ALT + F2 en typ het proces dat u wilt starten in het dialoogvenster. Voor het starten van VLC-mediaspeler in ons voorbeeldvoorbeeld: vlc.

Dit artikel is nauwkeurig en waar voor zover de auteur weet.De inhoud is alleen bedoeld voor informatieve of amusementsdoeleinden en vervangt geen persoonlijk advies of professioneel advies op zakelijk, financieel, juridisch of technisch gebied.

Lees Vandaag

Populair

Microsoft Word en andere technologieën die auteurs moeten beheersen
Computers

Microsoft Word en andere technologieën die auteurs moeten beheersen

Heidi Thorne i een pleitbezorger en auteur van non-fictieboeken, eBook en audioboeken. Ze i een voormalig redacteur van een handel krant.Ik kreeg een e-mail over het downloaden van een zip-be tand voo...
Mijn ervaring met 3D-printen
Industrieel

Mijn ervaring met 3D-printen

Alex i fotograaf ind hij op de lagere chool zat. Hij geniet enorm van ver chillende kun ten, en hij neemt om deel aan een aantal ervan.3D-printen i een relatief nieuwe technologie met een enorm potent...