Wat betekent “&” aan het einde van een linux-commando bedoel?

Ik ben een systeembeheerder en ik ben gevraagd een Linux-script uit te voeren om het systeem op te schonen.

Het commando is dit:

perl script.pl > output.log &

dus dit commando eindigt met een &teken, is er een speciale betekenis van?

Ik heb basiskennis van shell, maar ik heb dit nog nooit eerder gezien.


Antwoord 1, autoriteit 100%

De &zorgt ervoor dat de opdracht op de achtergrond wordt uitgevoerd.

Van man bash:

Als een commando wordt beëindigd door de besturingsoperator &, wordt de shell
voert de opdracht op de achtergrond uit in een subshell. De schaal doet
niet wachten tot het commando is voltooid, en
de retourstatus is 0.


Antwoord 2, autoriteit 9%

Bovendien kunt u de “&” sign om veel processen via één (1) ssh-verbindingen te laten lopen om een minimaal aantal terminals te behouden. Ik heb bijvoorbeeld één proces dat naar berichten luistert om bestanden te extraheren, het tweede proces luistert naar berichten om bestanden te uploaden: met behulp van de “&” Ik kan beide services in één terminal uitvoeren, via een enkele ssh-verbinding met mijn server.

*****Ik realiseerde me net dat deze processen door de “&” zal ook “in leven blijven” nadat de ssh-sessie is gesloten! best netjes en handig als je verbinding met de server wordt onderbroken**


Antwoord 3, autoriteit 9%

Als het niet anders wordt verteld, nemen commando’s de voorgrond over. Je hebt maar één “voorgrond”-proces dat in een enkele shell-sessie draait. De & symbool instrueert opdrachten om in een achtergrondproces uit te voeren en keert onmiddellijk terug naar de opdrachtregel voor aanvullende opdrachten.

sh my_script.sh &

Een achtergrondproces blijft nietin leven nadat de shell-sessie is afgesloten. SIGHUPbeëindigt alle lopende processen. Standaard in ieder geval. Als uw opdracht lang loopt of voor onbepaalde tijd loopt (dwz: microservice), moet u deze met nohup pr-pend zodat deze actief blijft nadat u de verbinding met de sessie verbreekt:

nohup sh my_script.sh &

EDIT:Er lijkt een grijs gebied te zijn met betrekking tot het sluiten van achtergrondprocessen wanneer & is gebruikt. Houd er rekening mee dat de shell mogelijkuw proces sluit, afhankelijk van uw besturingssysteem en lokale configuraties (met name op CENTOS/RHEL):
https://serverfault.com/a/117157.


Antwoord 4, autoriteit 2%

Ik weet het niet zeker, maar ik ben nu een boek aan het lezen en wat ik krijg is dat een programma zijn signaal moet verwerken (zoals wanneer ik op CTRL-Cdruk). Nu kan een programma SIG_IGNgebruiken om alle signalen te negeren of SIG_DFLom de standaardactie te herstellen.

Als u nu $ command &uitvoert, negeert dit proces dat als achtergrondproces wordt uitgevoerd gewoon alle signalen die zullen optreden. Voor voorgrondprocessen worden deze signalen niet genegeerd.

Other episodes