abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:00 | Nová verze

    Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.90 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.90 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    dnes 00:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 2024.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | IT novinky

    Počítačová hra Tetris slaví 40 let. Alexej Pažitnov dokončil první hratelnou verzi 6. června 1984. Mezitím vznikla celá řada variant. Například Peklo nebo Nebe. Loni měl premiéru film Tetris.

    Ladislav Hagara | Komentářů: 9
    včera 10:44 | Nová verze

    MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.23.0. V přehledu novinek je vypíchnuta podpora dynamických USB zařízení nebo nové moduly openamp, tls a vfs.

    Ladislav Hagara | Komentářů: 0
    včera 10:22 | Nová verze

    Canonical vydal Ubuntu Core 24. Představení na YouTube. Nová verze Ubuntu Core vychází z Ubuntu 24.04 LTS a podporována bude 12 let. Ubuntu Core je určeno pro IoT (internet věcí) a vestavěné systémy.

    Ladislav Hagara | Komentářů: 2
    včera 01:00 | Nová verze Ladislav Hagara | Komentářů: 0
    4.6. 19:55 | IT novinky

    Intel na veletrhu Computex 2024 představil (YouTube) mimo jiné procesory Lunar Lake a Xeon 6.

    Ladislav Hagara | Komentářů: 0
    4.6. 13:44 | IT novinky

    Na blogu Raspberry Pi byl představen Raspberry Pi AI Kit určený vlastníkům Raspberry Pi 5, kteří na něm chtějí experimentovat se světem neuronových sítí, umělé inteligence a strojového učení. Jedná se o spolupráci se společností Hailo. Cena AI Kitu je 70 dolarů.

    Ladislav Hagara | Komentářů: 0
    4.6. 13:22 | Nová verze

    Byla vydána nová verze 14.1 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    4.6. 12:55 | Zajímavý software

    Společnost Kaspersky vydala svůj bezplatný Virus Removal Tool (KVRT) také pro Linux.

    Ladislav Hagara | Komentářů: 11
    Rozcestník

    Jak spustit příkazy na pozadí? (nohup, disown, screen)

    24. 9. 2010 | Petr Bravenec | Návody | 35032×

    Jak spustit programy v příkazové řádce na pozadí? Tento článek představí čtyři možnosti. Jsou to: úlohy shellu, nohup, disown a screen.

    Obsah

    Úlohy v shellu

    link

    Nejjednodušší způsob, jak spustit z povelové řádky úlohu na pozadí, je využití úloh (jobs) v shellu. I když úlohy na pozadí podporují i jiné shelly, zde si popíšeme pouze nejpoužívanější linuxový shell – bash.

    Úlohu odešleme na pozadí kombinací kláves CTRL-Z. Úloha odeslaná na pozadí tímto způsobem je pozastavená, takže chceme-li ji pustit, musíme použít příkaz bg.

    $ sleep 100
    ^Z
    [1]+  Pozastaven              sleep 100
    $ bg
    [1]+ sleep 100 &
    $ 
    [1]+  Dokonán                sleep 100
    

    Mimo příkaz bg, kterým spustíme úlohu pozastavenou na pozadí, můžeme svůj spuštěný program příkazem fg z pozadí vylovit a poslat opět na povelovou řádku, do popředí:

    $ sleep 100
    ^Z
    $ fg
    sleep 100
    $
    

    Úlohu lze odeslat na pozadí i přímo, bez nutnosti mačkat kombinaci CTRL-Z, uvedením znaku & (ampersand) na konci řádku s příkazem. S takto spuštěnou úlohou lze pracovat pomocí příkazů fg, bg a CTRL-Z, jak jsme si popsali v odstavcích výše:

    $ sleep 100
    [1] 26579
    $ fg
    sleep 100
    ^Z
    [1]+  Pozastaven              sleep 100
    $ bg
    [1]+ sleep 100 &
    $ 
    [1]+  Dokonán                sleep 100
    

    Úloh lze na pozadí spustit libovolné množství. Protože už dvě úlohy jsou dost na to, aby uživatel ztratil o úlohách na pozadí přehled, nabízí shell příkaz jobs. Tímto příkazem vypíšete všechny úlohy na pozadí:

    $ sleep 100 &
    [1] 26804
    $ sleep 200 &
    [2] 26806
    $ jobs
    [1]-  Běží                 sleep 100 &
    [2]+  Běží                 sleep 200 &
    

    Povšimněte si čísla v hranaté závorce na začátku řádku – jde o číslo úlohy v shellu (liší se od PID, čísla procesu v systému, zde 26804 a 26806). Číslo úlohy v shellu usnadňuje práci s úlohami na pozadí pomocí příkazů fg, bgkill. U těchto tří příkazů lze uvést jako parametr číslo úlohy uvozené znakem % (procento):

    $ sleep 100 &
    [1] 26924
    $ sleep 200 &
    [2] 26926
    $ fg %1
    sleep 100
    ^Z
    [1]+  Pozastaven              sleep 100
    $ kill %1
    [1]-  Ukončen (SIGTERM)      sleep 100
    

    U výpisu spuštěných úloh si můžete povšimnout znaků + (plus) a - (minus):

    [2]   Běží                 sleep 100 &
    [3]-  Běží                 sleep 200 &
    [4]+  Běží                 sleep 300 &
    

    Aktuální úloha je označená znakem + (plus). Příkazy fgbg použité bez parametrů budou pracovat právě s touto úlohou. Pro úlohy lze použít i identifikátory %% (aktuální úloha), %+ (následující úloha) a %- (předchozí úloha):

    kill %%
    [4]+  Ukončen (SIGTERM)      sleep 300
    

    nohup

    link

    Spustíte-li na pozadí podle předchozí části článku například překlad rozsáhlého projektu a odhlásíte se, po návratu k počítači budete nepříjemně překvapení – vaše úlohy na pozadí byly ukončeny signálem SIGHUP zároveň s odhlášením (ukončením shellu). Abyste se této situaci vyhnuli, můžete použít příkaz nohup. Sám od sebe tento příkaz nespouští úlohy na pozadí, musíte uvést znak & za příkazem nebo použít kombinaci CTRL-Z a úlohu na pozadí rozběhnout příkazem bg:

    $ nohup sleep 200 &
    [1] 27701
    nohup: vstup ignoruji a výstup připojuji k „nohup.out“
    $
    # po odhlášení a přihlášení:
    $ ps xa | grep sleep
    28045 ?        S      0:00 sleep 100
    

    Příkaz nohup přesměruje standardní výstup a standardní chybový výstup programu do souboru nohup.out v aktuálním adresáři. Nelze-li do aktuálního adresáře zapisovat, pokusí se nohup vytvořit soubor nohup.out v domácím adresáři uživatele. Nepodaří-li se vytvořit ani zde, nebude příkaz proveden.

    disown

    link

    Spuštění úlohy na pozadí tak, aby přežila i odhlášení, lze dosáhnout i příkazem disown. Chování tohoto příkazu se však od příkazu nohup liší. Příkaz nohup odchytí signál SIGHUP odesílaný shellem a přesměruje výstup programu. Příkazem disown naproti tomu informujete shell, že uvedenému programu se nemá při ukončení shellu signál SIGHUP posílat. O výstupy programu při odhlášení přijdete. Na druhou stranu lze příkazem disown odeslat na pozadí i program, u kterého jsme to předem neplánovali. Jako parametr lze příkazu disown poslat UID procesu, případně číslo úlohy v shellu (uvozené procentem):

    $ sleep 100 &
    [1] 28150
    $ disown %1
    # po odhlášení a přihlášení:
    $ ps xa | grep sleep
    28150 ?        S      0:00 sleep 100
    

    screen

    link

    Všechny výše uvedené způsoby spouštění úloh na pozadí mají několik nevýhod. Zásadní nevýhodou je, že výstup z programu je neustále přesměrovaný na výstup. Pustíte-li si na pozadí překlad většího projektu, je použitá povelová řádka pro další interaktivní práci prakticky nepoužitelná, protože se vám na ni bude vypisovat průběh překladu. Můžete sice použít příkaz nohup a výstup přesměrovat do souboru, ale takto zase přijdete o možnost překlad dále jakkoliv ovlivnit (vstup se ignoruje). Pro úlohy, které jsou alespoň částečně interaktivní, postrádá výše popsaný způsob spouštění na pozadí přijatelný komfort.

    Omezení a nevýhody uvedených postupů odstraňuje příkaz screen. Správa úloh v programu screen je zcela odlišná od úloh v shellu. Program screen vytváří několik instancí shellu (a obrazovek), mezi kterými lze libovolně přepínat. V každém shellu lze samozřejmě spouštět další úlohy na pozadí s použitím shellu. Nastartoval lze i další screen, ale vhodnější je vytvoření další obrazovky.

    $ screen
    $ sleep 100
    ^AD
    [detached]
    $ screen -r
    $ sleep 100
    

    Příkaz screen se ovládá pomocí přepínačů a zkratek. Pro nejjednodušší použítí stačí znát jen několik základních postupů:

    screen Vytvoření nové nezávislé obrazovky.
    CTRL-A D Odpojení od obrazovky
    CTRL-A C Vytvoření nové obrazovky v nastartovaném programu screen (musíte být připojení)
    CTRL-A N Přepnutí na další obrazovku v pořadí
    CTRL-A P Přepnutí na předchozí obrazovku v pořadí
    CTRL-D Ukončení aktuální obrazovky. Ve skutečnosti jde o příkaz shellu, obrazovka se ukončí, jakmile je ukončen program v ní spuštěný (obvykle právě shell).
    screen -r Připojení ke screenu. Zde může běžet libovolný počet obrazovek.
    screen -r 12345 Připojení ke screenu s uvedeným PID. Screenů můžete mít nastartovaných více.
    screen :-D -R Připojení ke screenu, a to i v případě, že je screen připojený už někam jinam (druhá obrazovka se odpojí). Užitečné, pokud v práci spustíte překlad, zapomenete se odpojit, a doma se chcete podívat na průběh překladu.
    screen -wipe Vyčištění seznamu screenů od nefunkčních instancí.

    Možnosti programu screen jsou mnohem širší. Podrobnosti najdete v manuálové stránce a v článku GNU Screen.

           

    Hodnocení: 100 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    24.9.2010 01:14 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    typo: uvezenéuvozené

    Jinak ale díky, moc pěkný článek ;-)
    24.9.2010 04:17 Michal
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Zajimave, disown jsem ani po 15 letech prace s linuxem neznal. Clovek se porad ma co ucit :)
    24.9.2010 06:17 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    $ nohup sleep 200 &
    [1] 27701
    nohup: vstup ignoruji a výstup připojuji k „nohup.out“
    $
    # po odhlášení a přihlášení:
    $ ps xa | grep sleep
    28045 ?        S      0:00 sleep 100
    
    Jo, tomu říkám magie.
    In Ada the typical infinite loop would normally be terminated by detonation.
    Petr Bravenec avatar 24.9.2010 06:28 Petr Bravenec | skóre: 43 | blog: Bravenec
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    To jsou věci. V počítači mi straší! :-(
    Petr Bravenec - Hobrasoft s.r.o.
    Josef Kufner avatar 24.9.2010 22:09 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    $ whereis nohup
    nohup: /usr/bin/nohup
    Hello world ! Segmentation fault (core dumped)
    24.9.2010 23:16 zulu
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    a?
    Josef Kufner avatar 26.9.2010 09:59 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    No že nohup je binárka jako každá jiná, takže 27701 je PID nohupu a ne toho catu – cat je pouze argument předaný nohupu a nohup ho teprve spustí.
    Hello world ! Segmentation fault (core dumped)
    26.9.2010 11:08 Sten
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    nohup neprovede fork + exec, ale pouze exec (poté, co přesměruje výstup do souboru a zavře vstup), takže PID spuštěného příkazu se nezmění ;-)
    27.9.2010 21:29 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    A jeho parametry taky ne.
    In Ada the typical infinite loop would normally be terminated by detonation.
    24.9.2010 06:43 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    K tomu screenu bych ještě přidal screen -x. Tím se dá připojit na jednu screen z více míst současně. Pokud na těch více místech sedí i víc lidí, tak vidí, co dělají ostatní a můžou tak spolupracovat.
    In Ada the typical infinite loop would normally be terminated by detonation.
    Jiří Svoboda avatar 24.9.2010 07:39 Jiří Svoboda | skóre: 37 | blog: cat /dev/mind | Prostějov
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Tak tohle jsem neznal. :-)

    Já si zase pamatuju, že v distrech býval na podobnou věc příkaz "kibitz", v poslední době ale nějak vymizel.
    25.9.2010 06:50 Andrej | skóre: 9
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    screen -x je spolu s confcallom super vec na ad-hoc pomoc, prednasky a howtos. pripadne aj s kolegom co sedi pri susednom stole a takto je to pohodlnejsie ako sa tlacit pri jednom displayi.
    Any sufficiently advanced magic is indistinguishable from technology. --Larry Niven
    vain avatar 24.9.2010 08:07 vain | skóre: 16
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Eh, zrovna včera jsem to hledal, přesněji jsem hledal nohup, a našel jsem tady ve starším článku od Davida http://www.abclinuxu.cz/clanky/unixove-nastroje-16-getopts-time-nohup, takže kdyby si někdo chtěl oživit paměť na tenhle článek =)
    If the only choice you've got is to do the wrong thing, then it's not really the wrong thing, it's more like fate.
    24.9.2010 08:41 reqw5q23
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Pripominam klasicky, ale zrejme uz zapomenuty:
    bash$ ( prikaz >& log &)
    24.9.2010 09:06 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše chybka
    V článku je dvakrát uvozený & (v kódu je &), takže v textu článku je „uvedením znaku & (ampersand)“ místo „uvedením znaku & (ampersand)“.
    24.9.2010 09:09 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: chybka
    A to samé pak ještě jednou u „nohup“.
    24.9.2010 09:38 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: chybka
    Díky, opraveno.
    jose17 avatar 24.9.2010 09:07 jose17 | skóre: 44 | blog: Joseho_blog | Bratislava
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    ..uvedením znaku & amp; (ampersand)..
    $ sleep 100 &
    [1] 26579
    $ fg
    Zásadní nevýhodou je, že výstup z programu je neustále přesměrovaný na výstup.
    a kam inam? :-) nemalo tam byt do suboru?
    Ja vim, on vi, ty nano!
    24.9.2010 09:10 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Standardní výstup je přesměrován na výstup, tj. do terminálu.
    Petr Bravenec avatar 24.9.2010 10:53 Petr Bravenec | skóre: 43 | blog: Bravenec
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Nene, ta věta je skutečně napsaná dobře. Když si pustím na pozadí překlad, výpisy půjdou stále na ten stejný výstup - obvykle na obrazovku. Pokud tedy žiju v představě, že v době překladu budu moci vesele editovat, tak budu rychle vyveden z omylu. Editace textu, který je na obrazovce neustále přepisován, je veselá pouze pro pozorovatele pozorujícího nešťastného editujícího.
    Petr Bravenec - Hobrasoft s.r.o.
    default avatar 24.9.2010 09:19 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    [1]+  Pozastaven              sleep 100
    $ bg
    [1]+ sleep 100 &
    $ 
    [1]+  Dokonán                sleep 100
    nohup: vstup ignoruji a výstup připojuji k „nohup.out“
    Jak s tímhle gibber-speakem můžete prosím vás pracovat? Vždyť tomu neni absolutně rozumět!
    24.9.2010 09:24 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Nevím, čemu na tom nerozumíte, ale možná to bude tím, že nerozumím vašemu komentáři.
    vain avatar 24.9.2010 09:25 vain | skóre: 16
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Možná, hádám, myslí českou lokalizaci.
    If the only choice you've got is to do the wrong thing, then it's not really the wrong thing, it's more like fate.
    24.9.2010 11:28 ikkar
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    +1
    Jendа avatar 24.9.2010 12:06 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Co se ti na tom nelíbí? Mně to přijde srozumitelné.
    26.9.2010 20:30 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)

    V novější verzi bashe jsou tato slovesa již v ženském rodě. Původně jsem měl jako podmět „příkaz“, ale pak jsem se přiklonil k „úloze“, protože s ní operuje příkaz „jobs“.

    Znáte lepší překlad? Rádi si ho přečteme (<translation-team-cs@lists.sourceforge.net> nebo <diskuze@lists.l10n.cz>).

    24.9.2010 10:34 Michal Karas | skóre: 45 | blog: /dev/random
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Zmínil bych ještě screenu podobný tmux. Jeho výhody jsou popsány ve FAQ.
    24.9.2010 10:35 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Proč pořád vidím ty bláboly že po odhlášení z počítače úlohy běžící na pozadí dostanou SIGHUP a budou ukončeny, když většina shellů (co do rozšířenosti) tento signál neposílá a tyto úlohy tedy neukončuje, poud je o to explicitně nepožádáme (huponexit v Bash např.)? Poslat ho může klient (putty), ale to je jiná.
    Petr Bravenec avatar 24.9.2010 10:48 Petr Bravenec | skóre: 43 | blog: Bravenec
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)

    OK. Je to jinak, ale výsledek je stejný. Cituji manuál bash:

    The shell exits by default upon receipt of a SIGHUP. Before exiting, an interactive shell resends the SIGHUP to all jobs, running or stopped.

    Petr Bravenec - Hobrasoft s.r.o.
    24.9.2010 13:42 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    To je ovšem něco jiného než o čem jsme mluvil :)

    Vy mluvíte o ukončení shellu příkazem SIGHUP (lze například kill -HUP <PID>), tam se tento explicitní signál opravdu přeposílá a jobs se ukončí.

    Já ovšem mluvil o odhlášení (standardní ukončení jako exit či CTRL-D žádný SIGHUP při tom tomu shellu na serveru zpravidla neposílám:).
    24.9.2010 13:54 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Pokud byste si to chtěl vyzkoušet (uznávám že zde manuál nestačí a je potřeba i zkušenosti a praxe), tak to jde třeba takto:

    Na pozadí spusťte skript hup.sh:
    #!/bin/bash
    
    function hup() {
      echo hup
    }
    
    trap hup HUP
    
    sleep 300
    Nyní standardní odhlášení:
    -bash$ ./hup.sh &
    -bash$ exit
    logout
    Connection to localhost closed.
    
    SIGHUP se neposlal, na rozdíl od:
    -bash$ ./hup.sh &
    -bash$ kill -HUP <..pid..>
    -bash$ Hangup
    hup
    Connection to localhost closed.
    
    27.9.2010 09:41 Sten
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    SIGHUP se pošle ve chvíli, kdy dojde ke ztrátě spojení (což se u remote shellů může stát), případně u bashe se zapnutým huponexit i při ukončení. Proto je často dobře své joby proti tomu ošetřit
    24.9.2010 13:43 Jiří Benc | skóre: 13 | blog: ublog | Praha
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Ve třetím boxu chybí na konci posledního řádku &.
    24.9.2010 13:44 Jiří Benc | skóre: 13 | blog: ublog | Praha
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    ...na konci prvního řádku, samozřejmě.
    24.9.2010 14:50 Smeto
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    pouzival som kedysi screen, no nahradil som ho http://tmux.sourceforge.net/ niekomu mozno sadne viac...
    24.9.2010 15:36 Sten
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Nastartoval lze i další screen, ale vhodnější je vytvoření další obrazovky
    Jak kdy. Pokud si například upravíte screen tak, že na spodní hraně zobrazuje spuštěné obrazovky (např. pomocí hardstatus string '%{= kw}%-w%{= kG}%50>%n %t%{= kw}%+w %{= kW}%-=%Y/%m/%d %c:%s%{-}%<'), potom spuštění dalšího screenu vytvoří vlastně strom (jeho obrazovky se zobrazují nad obrazovkami nadřazeného screenu). Ve spojení s ssh STROJ -t screen (resp. mým upraveným obalem, který se automaticky znovu připojí při ztrátě spojení) velmi užitečná věc, pokud spravujete desítky strojů a chcete se v tom vyznat (a pokud použijete screen -x a připojujete se z několika míst najednou, např. notebooku a mobilu, tak je to ještě zajímavější) :-)
    LennyCZ avatar 24.9.2010 20:56 LennyCZ | skóre: 8 | Brno
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Jen takový brainstorming:

    Pokud pustím např. GUI proces z GUI terminálu na pozadí, a následně jej ukončím, hláška o ukončení se mi nezobrazí nikdy hned, ale až po dalším newline, tj. pokud proces opravu jen spustím a hned ukončím, aniž bych při tom šahal na terminál, výstup vypadá takto:
    lennycz@machina:~$ leafpad &
    [1] 2054
    lennycz@machina:~$
    lennycz@machina:~$
    [1]+  Done                  leafpad
    lennycz@machina:~$
    Vysvětluji si to tak, že shell nechce přerušit jiný výstup, ale není přece podstatnější informace, že proces skončil a to v reálném čase? Nebo ještě lépe: je za "okamžitým" vypsáním hlášky i vážnější riziko než jen "optické rozhození" výstupu?
    Given a choice between dancing pigs and security, users pick dancing pigs every time. (Dancing pigs problem)
    pavlix avatar 24.9.2010 22:13 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Vysvětluji si to tak, že shell nechce přerušit jiný výstup, ale není přece podstatnější informace, že proces skončil a to v reálném čase?
    Není :). Jinak byste určitě použil nějakou interaktivnější metodu, zvlášť v dnešní době.

    Zkus si představit třeba uživatele nějaké celoobrazovkové aplikace, jak se mu rozsype celý display kvůli výpisu ukončení jobu, se kterým navíc ještě celkem počítal, že někdy skončí.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    26.9.2010 20:44 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)

    To je vlastnost knihovny readline, ktrou bash používá. V okamžiku, kdy bash čeká na vstup od uživatele, tak běží smyčka z knihovny readline, která o nějakých úlohách nemá ani páru. Teprve až když uživatel odešle vstup (obvykle klávesa Enter), tak se řízení vrátí do bashe, který se přes waitpid(2) dozví o ukončení potomků.

    Samozřejmě by se to dalo udělat i jinak, ale takto je to (pro mě) lepší, protože se mi nerozsype právě zadávaný příkaz.

    (I to by se dalo ošetřit, ale zjevně to nikdo ještě nenaprogramoval.)

    25.9.2010 16:46 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Hezké screen jsem nepoužíval, vždy jsem si udělal další příkazové okno. Ale pokud mám jen textový teminál a není to konsole s možnostmi přepínání tak se rozhodně velmi hodí.
    David Watzke avatar 25.9.2010 22:10 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    To není jenom o tom, že máš hloupej emulátor terminálu, já to screen používám i v YaKuake, který taby podporuje. Jde o to, že když třeba kiksne X server (příp. YaKuake nebo KDE), tak to screen nijak neovlivní a lze v klidu nahodit znova.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    default avatar 26.9.2010 11:05 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Jde o to, že když třeba kiksne X server (příp. YaKuake nebo KDE), tak to screen nijak neovlivní a lze v klidu nahodit znova.
    Vida. Já to používám kvůli nestabilním linkám. :-)
    David Watzke avatar 26.9.2010 12:16 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Taky možnost. Jinak se to velice hodí při SSH z mobilu.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    26.9.2010 13:14 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Mně jako nejužitečnější připadá že zachovává interaktivitu, čili možnost vstupu a výstup, takže ho lze nechat puštěný na serveru a odpojovat/připojovat se ke spuštěným úlohám podle potřeby.
    27.9.2010 20:05 Mik
    Rozbalit Rozbalit vše Re: Jak spustit příkazy na pozadí? (nohup, disown, screen)
    Ahoj, jenom pro uplnost bych dodal 2 unixove evergreeny pro spousteni na pozadi.

    1) at ... jednorazove spusteni v naplanovany cas Napriklad:
    at now + 1 hour
    poweroff
    Ctrl-D
    2) cron ... pravidelne spousteni
    man cron 
    man crontab
    Mik

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.