A háttérben futó programok futása a terminálból

123

Hogyan futtathatok egy programot a shell hátterében, miközben le tudod zárni a parancsértelmezőt a program futása közben? Ha azt mondanám, hogy az UI-nak problémái vannak, vagy valamilyen okból, programot kell indítania a terminál ablakból, mondjuknm-applet:

nm-applet

Az indításkor a terminál ablak előtérbe kerül.

Van-e egyszerű mód a program futtatására a háttérben, anélkül, hogy el kellene hagynia a terminált nyitva, vagy az egész terminálon kellene elfoglalnia?

Ezen a feljegyzésen találtam módot arra, hogy futtathatok programokat a terminálról, és engedélyezzem más bemeneteket, ha egy parancsot és egy (&) parancsot hozzáadunk a parancshoz:

nm-applet &

De ez nem sok, mivel a terminálon elindított bármely folyamat megszakad, ha a terminál bezáródik.

    
készlet OVERTONE 22.02.2012 01:07
forrás

8 válasz

157

Nemrég jöttem, hogy kedveljem asetsid -ot. Úgy tűnik, mintha csak a terminálról futtatnál valamit, de megszakíthatja a kapcsolatot (bezárja a terminált), és csak folytatódik.

Ez azért van, mert a parancs valójában kihúz, és miközben a bemenet az aktuális terminálra érkezik, egy teljesen más szülő tulajdonában van (amely a terminál bezárása után is él).

Példa:

setsid gnome-calculator

Én is nagyon részleges vagyok adisown -ban, amellyel a folyamatot az aktuális fáról elkülönítheted. Ezt a háttéranyaggal együtt használhatja:

gnome-calculator & disown

Én is megtanultam a lehalászási alsó részeket zárójelekkel. Ez az egyszerű módszer működik:

(gnome-calculator &)

És természetesen vannohup, ahogy említetted. Nem vagyok vad anohup miatt, mert hajlamos írni a~/nohup.out -ra anélkül, hogy megkérném. Ha erre támaszkodik, ez lehet az Ön számára.

nohup gnome-calculator

És a hosszabb távú folyamatokhoz olyan dolgok vannak, mint ascreen és más virtuális terminál-muxerek, amelyek megtartják a kapcsolatokat a kapcsolatok között. Ezek valószínűleg nem igazán vonatkoznak rád, mert csak ideiglenes hozzáférést szeretnél elérni a terminál kimenethez, de ha később szeretnél visszatérni és megtekintheted a legújabb terminál aktivitást, a képernyő valószínűleg a legjobb választása.

Az internet tele vanscreen oktatóanyagokkal, de itt van egy egyszerű gyorsindítás:

válasz adott Oli 22.02.2012 01:41
forrás
46

Íme a két út, amivel megyek. Először is, nem fut egy terminálról; Alt + F2 megnyitása a futtatási párbeszédablak megnyitásához és futtatásához innen (& nélkül).

Egy terminálról futtassa

nm-applet &

De NE zárja be a terminált. Vagyis ne nyomja meg az X gombot a bezáráshoz, és ne használja a Fájl - > Kilépés a menubarból. Ha ilyen módon zárja le a terminált, akkor egy HUP (Hang UP) jelet küld a befutó bashnek, ami viszont elküldi a HUP jelet minden gyermeke számára (ezért működik a nohup ebben az esetben).

Ehelyett lépjen ki a shellből aexit vagy a Ctrl + D megnyitásával. A bash majd elutasítja a gyermekeit, majd kilép, és a háttérfolyamatok még mindig futnak. És amikor a bash kilép, a terminál elvesztette a gyermek folyamatát, ezért bezárul is.

Mindent egyszerre csinál:

nm-applet & exit
    
válasz adott geirha 23.02.2012 12:45
forrás
13

Ahogy rámutatott, futtathatja

nohup nm-applet &  

figyelmen kívül hagyja a végjelet a terminál bezárásakor. Nincs probléma ezzel.

    
válasz adott desgua 22.02.2012 01:17
forrás
10

Az egyik dolog, hogy sok más hiányzik a válasz, hogy hogyan kell eltávolítani egy futó folyamatot, amely jelenleg blokkolja a shell-ot. A legtöbb terminálban és héjban a Ctrl + Z megállítja a futó folyamatot, és visszaadja a beviteli prompthoz. Ezután kiadhat

bg

a futási folyamat háttérbe juttatásához. Issue

fg

helyezze vissza a futó folyamatot az előtérbe.

EDIT : További részletek a válaszban később felfedeztem.

    
válasz adott krlmlr 31.03.2015 16:37
forrás
7

Használja a(exec PROGRAM &> /dev/null & ) -ot, hogy aPROGRAM -ra átvehesse a PID-szintet. Többször is teszteltem ezt a megközelítést több különböző programmal. Az eredeti terminál bezárása nem befolyásolja az újonnan létrehozott programot

Kis demó:

$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working
    
válasz adott Sergiy Kolodyazhnyy 30.11.2015 12:35
forrás
2

Ajánlom a byobu terminált. A F6 gomb megnyomásával könnyedén leválaszthatja a folyamatot.

    
válasz adott speter 05.03.2013 01:07
forrás
1

Bár vannak jó válaszok, szeretném megadni a két centemet arra vonatkozóan, hogyan használom a MATLAB-ot a háttérben.

sudo -b matlab

A sudo-b tag képes futtatni az alkalmazásokat a háttérben. A parancs végrehajtása után is lezárhatja a terminált.

Valószínűleg nincs kapcsolatban, de van egy csodálatos weboldal, amelyet meg lehet magyarázni a shell parancsok megmagyarázására. link

    
válasz adott user3342981 28.06.2016 16:39
forrás
0

Nem tudom, hogy ez a helyes út, de csak most kezdem egy másik munkamenetet, miközben elhagyom az előzőt. Például egy egyszerű webszervert futtattam a málnámon. a web.py one. akkor elindítok egy új munkamenetet, miközben egyedül hagyom. ez az. akkor is hasznos, mivel még mindig frissül, még akkor is, ha a másik munkamenetben dolgozik.

    
válasz adott leo 06.07.2016 00:15
forrás