A Bash használatával készült asztalon használjam a következőt: ' & ', nohup, disown, vagy a három valamilyen kombinációja egy folyamat elindításához, és teljesen egyedül fut?

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 
  1. gedit & 
  2. gedit & disown 
  3. nohup gedit 
  4. 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:

  1. 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 
  2. 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 & 
  3. 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.

  4. 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:

  1. myprog & ha csak a háttérben akarok futtatni valamit a jelenlegi bejelentkezési héjam. Ez nekem az esetek 99% -ában megfelelő …

  2. 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.

  1. A héj megszakít minden ismert munkát (de nem a gyermekeiket), ha megszakítási jelet kap.
  2. 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á.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük