Kun suoritan nämä neljä komentoa Xubuntu 16.04: ssä joko paikallisesti tai ssh: n kautta, ne kaikki näyttävät tekevän täsmälleen saman asian:
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
En osaa saat eron gedit &
ja gedit & disown
välillä, koska jos tapan pääterminalin tai kirjaudun ulos ssh-istunnosta, näyttää siltä, että gedit on ”hylätty” kummassakin skenaariossa.
Mitä tulee kahteen ja kolmeen, näen ainoan eron, että komennon ulostulo kirjataan erilliseen tiedostoon ja kirjataan edelleen tähän erilliseen lokiin, vaikka alkuperäinen kuori-istunto, joka synnytti bg-prosessin, tapetaan.
Mitä tulee kolmeen ja neljään, luen jatkuvasti, että tekninen ero on olemassa, mutta en voi ollenkaan ymmärtää, miksi haluaisit mieluummin toisen kuin toisen.
Kumpi minun pitäisi käyttää? Olen nähnyt kaikki neljä opetusohjelmissa käytettyä komentoa ja Q & As, ja huolimatta todella upeista vastauksista, jotka kuvaavat nohupin ja disownin välisiä teknisiä eroja, en näytä saavan selkeää suositusta (lukuun ottamatta ehkä lokitietoja tai shell-yhteensopivuutta), jota minun pitäisi käyttää.
Kommentit
- Tarvitset & kaikissa tapauksissa, joissa haluat jatkaa kuoressa (ja ohjelma ei haaroita itseään). Et välttämättä tarvitse nohupia ohjelmille, jotka sulkevat tiedostojen kuvaimet ja irrottavat itsensä (se on. Voit käyttää kieltäytymistä tosiasian jälkeen (jos unohdat nohupin) ja kuten kirjoitettiin ennen kuin käyttöliittymäsovellukset eivät tarvitse sitä.
Vastaa
Kun minun on suoritettava komentosarja, joka toimii pitkään , ja minä olen päällä ssh
-istunnon, haluan joko:
-
Tehtävän tulisi jatkua, vaikka verkko katkeaa tai kun pakkan kannettavan tietokoneen ja menen pois .
a. Tehtävä voidaan suorittaa ilman minun vuorovaikutteista syötettä.
nohup do_my_stuff &
b. Tehtävä saattaa tarvita minulta jotain stdinissä .
man tmux history -w tmux do_my_stuff
-
Taustaprosessi parantaa jotenkin nykyistä istuntoani ja sen pitäisi kuolla yhdessä istunnon kanssa. Harvinaisuus.
enhance_my_session >>/tmp/enhance.$$.log 2>&1 &
-
Haluan, että asia sylkisi joitain lokeja satunnaisesti ssh-istunnossani. Odota, mitä? Ei, en koskaan halua sitä. Kiitos sinä
disown
. -
Toinen asia, jota en koskaan halua: muunna prosessin täysin irrotettuun daemoniin, mutta vältä sen automaattista käynnistämistä seuraavan käynnistyksen yhteydessä. En koskaan halua sitä, koska en voi ennustaa, milloin järjestelmä käynnistyy uudelleen ja kuka käynnistää sen uudelleen.
Vastaa
Tyypillisesti teen vain seuraavat toimet:
-
myprog &
jos haluan vain suorittaa jotain taustalla nykyinen kirjautumistunnukseni. Tämä riittää minulle 99% ajasta … -
iv
nohup myprog > /my/path/output.txt &
jos aloitan jotain kuoresta, mutta haluan kirjaudu ulos myöhemmin (kenties taustatehtävän ollessa vielä käynnissä).
Vastaa
Sinä täytyy erottaa kuoresta poistuminen päätelaitteen keskeyttämisestä.
- Kuori tappaa kaikki tunnetut työpaikat (mutta ei heidän lapsensa), kun se saa keskeytyssignaalin.
- Pääte tappaa kaikki, mihin se oli ohjaava pääte.
Yleensä paras ratkaisu (käyttäjätasolla) IMHO on screen
.
Jos tehtäväsi on pikemminkin järjestelmään kuin käyttäjään liittyvä, voit tehdä siitä systemd-palvelun, jonka aloitat manuaalisesti.