Spouštění programů na pozadí z terminálu

123

Jak spustím program na pozadí shellu s možností zavření shellu při opuštění programu? Řekněme, že mé uživatelské rozhraní má problémy nebo z nějakého důvodu, musím zavést program z terminálového okna, řekněme,nm-applet:

nm-applet

Když je spuštěn, zaujímá popředí okno terminálu.

Existuje nějaký jednoduchý způsob, jak spustit program na pozadí, aniž byste museli nechat terminál otevřený nebo nechat jej zabírat celý terminál?

V této poznámce jsem nalezl způsob, jak spustit programy z terminálu a umožnit jim další vstupy připojením příkazu ampersand (&) k příkazu jako takový:

nm-applet &

Ale to není moc užitečné, protože všechny procesy spuštěné v terminálu jsou zabity po ukončení terminálu.

    
dané OVERTONE 22.02.2012 01:07

8 odpovědí

157

Nedávno jsem se jakosetsid líbil. Začíná to vypadat, jako byste právě něco řídili z terminálu, ale můžete odpojit (zavřít terminál) a to prostě pokračuje.

Je to proto, že příkaz skutečně vystupuje a zatímco vstup přichází k aktuálnímu terminálu, je vlastněn úplně jiným rodičem (který zůstane po ukončení terminálu naživu).

Příklad:

setsid gnome-calculator

Jsem také částečně částečný kdisown, který lze použít k oddělení procesu od aktuálního stromu. Používáte jej ve spojení s pozadím ampersand:

gnome-calculator & disown

Také jsem se dozvěděla o třepání podsvětí s závorkami. Tato jednoduchá metoda funguje:

(gnome-calculator &)

A samozřejmě existujenohup, jak jste zmínil. Nejsem divoký onohup, protože má tendenci psát na~/nohup.out, aniž by o to požádal. Pokud se na to spoléháte, může to být pro vás.

nohup gnome-calculator

A pro dlouhodobější procesy existují věci jakoscreen a další virtuální terminálové muxery, které udržují relace naživu mezi spoji. Pravděpodobně se na vás opravdu nevztahuje, protože chcete pouze dočasný přístup k terminálovému výstupu, ale pokud byste chtěli vrátit se někdy později a zobrazit poslední terminálovou aktivitu, obrazovka by byla pravděpodobně vaše nejlepší volba.

Internet je plný tutoriálůscreen, ale zde je jednoduchý rychlý start:

odpověděl Oli 22.02.2012 01:41
46

Jedná se o dva způsoby, jakými bych se vydal. Za prvé, neběží to z terminálu; < Alt + F2 otevřete dialog pro spuštění a spusťte jej odtud (bez &).

Z terminálu spusťte

nm-applet &

Ale terminál neuzavřete sami. Tedy neotáčejte tlačítko X a zavřete ho a nepoužívejte Soubor - > Vyjděte z jeho menu. Pokud zavřete terminál tímto způsobem, odešle signál HUP (Hang UP) do bash, který běží uvnitř, což následně odešle signál HUP všem jeho dětem (to je důvod, proč nohup funguje v tomto případě).

Místo toho ukončete shell spuštěnímexit nebo stisknutím Ctrl + D . bash potom odmítne své děti, pak opustí a ponechá procesy na pozadí, které stále běží. A když skončí bash, terminál ztratil svůj podřízený proces, takže se taky uzavře.

Dělat vše najednou:

nm-applet & exit
    
odpověděl geirha 23.02.2012 12:45
13

Jak jste uvedl, můžete spustit

nohup nm-applet &  

ignoruje koncový signál při zavírání terminálu. Žádný problém s tím.

    
odpověděl desgua 22.02.2012 01:17
10

Jedna věc, která chybí mnoho dalších odpovědí, je, jak odpojit běžící proces, který momentálně blokuje shell. Ve většině terminálů a shellů Ctrl + Z zastaví běžící proces a vrátí vás zpět na vstupní výzvu. Poté můžete vydat

bg

odeslat běžící proces do pozadí. Problém

fg

místo toho spusťte běžící proces zpět do popředí.

EDIT : Více podrobností naleznete v této odpovědi , kterou jsem později objevil.

    
odpověděl krlmlr 31.03.2015 16:37
7

Použijte(exec PROGRAM &> /dev/null & ) pro povolení převzetí PID subshell oPROGRAM. Tento přístup jsem testoval několikrát s několika různými programy. Uzavření původního terminálu nemá žádný vliv na nově založený program

Malá ukázka:

$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working
    
odpověděl Sergiy Kolodyazhnyy 30.11.2015 12:35
2

Doporučuji terminál byobu. Postup můžete snadno oddělit stisknutím klávesy F6.

    
odpověděl speter 05.03.2013 01:07
1

Ačkoli jsou zde výše uvedené dobré odpovědi, rád bych dal své 2 centy o tom, jak používat MATLAB v pozadí.

sudo -b matlab

Tag-b sudo může spustit aplikace na pozadí. Také můžete ukončit po provedení tohoto příkazu.

Pravděpodobně nesouvisející, ale existuje skvělá webová stránka, kterou můžete použít k vysvětlení příkazů shellu. Odkaz

    
odpověděl user3342981 28.06.2016 16:39
0

Já nevím jeho správnou cestou, ale jen jsem zahájil další zasedání, zatímco opustil předchozí jeden všichni. Například jsem spustil jednoduchý webový server na svém malinku. web.py jeden. pak začnu novou relaci a nechám ji sama. a je to. je také užitečné, protože jste stále aktualizováni, i když pracujete na jiné relaci.

    
odpověděl leo 06.07.2016 00:15