Amikor ezt a négy parancsot futtatom az Xubuntu 16.04-en, akár lokálisan, akár az ssh-n keresztül, úgy tűnik, hogy mindegyikük pontosan ugyanazt csinálja:
export DISPLAY=:0.0 #not necessary unless you have logged in over ssh instead of starting a terminal locally
-
gedit &
-
gedit & disown
-
nohup gedit
-
nohup gedit & disown
Nem ” megkapja a különbséget gedit &
és gedit & disown
között, mert ha megölöm a szülőterminált vagy kijelentkezem egy ssh munkamenetből, úgy tűnik, hogy A gedit mindkét forgatókönyvben “elutasítva”.
Ami a kettőt és a hármat illeti, az egyetlen különbséget azt látom, hogy a parancs kimenetét külön fájlba naplózzák, és továbbra is a különálló naplóba kerülnek, még akkor is, ha az eredeti shell munkamenet, amely a bg folyamatot hozta létre, megölik.
Ami a hármat és a négyet illeti, folyton azt olvasom, hogy van technikai különbség, de egyáltalán nem értem, miért választanád jobban az egyiket a másikon.
Melyiket használjam? Láttam az oktatóprogramokban használt mind a négy parancsot, és Q és annak ellenére, hogy nagyon jó válaszok írták le a nohup és az elutasítás közötti technikai különbségeket, úgy tűnik, hogy nem kapok egyértelmű ajánlást (kivéve talán naplózási vagy shell-kompatibilitási célokat), amelyekhez használnom kellene.
Megjegyzések
- Szüksége van a & -re minden olyan esetben, amikor a héjban akarja folytatni (és a program nem forkolja magát). Lehet, hogy nincs szüksége nohup-ra azoknál a programoknál, amelyek bezárják a fájlleírókat és szétválasztják magukat (ez a Gibt igaz a legtöbb GUI-alkalmazás esetében). Használhatja a visszautasítást a tény után (ha elfelejtette a nohup-ot), és ahogy korábban írták, mielőtt a GUI-alkalmazásoknak nincs szüksége rá.
Válasz
Amikor olyan szkriptet kell futtatnom, amely hosszú ideig fog futni , és én ssh
munkamenetet szeretném:
-
A feladatot akkor is folytatni kell, ha a hálózat megszakad, vagy amikor becsomagolom a laptopomat, és elmegyek .
a. A feladat interaktív bemenet nélkül fejeződhet be.
nohup do_my_stuff &
b. Előfordulhat, hogy a feladathoz kell valami tőlem a stdin-en .
man tmux history -w tmux do_my_stuff
-
A háttérfolyamat valamiképp javítja az aktuális munkamenetemet, és a munkamenettel együtt meg kell halnia. Ritkaság.
enhance_my_session >>/tmp/enhance.$$.log 2>&1 &
-
Azt akarom, hogy a dolog véletlenszerűen köpjön néhány naplót az ssh munkamenetem során. Várjon, mi? Nem, ezt soha nem akarom. Köszönöm te
disown
. -
Egy másik dolog, amit soha nem akarok: konvertálni a folyamat egy teljesen leválasztott démonra, de kerülje az automatikus indítást a következő indításkor. Soha nem vágynék erre, mert nem tudom megjósolni, hogy a rendszer mikor indul újra és ki indítja újra.
Válasz
Általában csak a következőket teszem:
-
myprog &
ha csak a háttérben akarok futtatni valamit a jelenlegi bejelentkezési héjam. Ez nekem az esetek 99% -ában megfelelő … -
iv
nohup myprog > /my/path/output.txt &
ha valamit a héjból indítok, de szeretnék jelentkezzen ki utána (esetleg amíg a háttérfeladat még fut).
Válasz
Ön meg kell különböztetnie a héjból való kilépést a terminál megszakításától.
- A héj megszakít minden ismert munkát (de nem a gyermekeiket), ha megszakítási jelet kap.
- A terminál megöli minden, amire a vezérlő terminál volt.
Általában a legjobb megoldás (felhasználói szinten) az IMHO a screen
.
Ha a feladata inkább a rendszerhez, mint a felhasználóhoz kapcsolódik, akkor azt egy systemd szolgáltatásgá teheti, ahelyett, hogy manuálisan indítaná.