Uruchamianie programów w tle z terminala

124

Jak uruchomić program w tle powłoki, z możliwością zamknięcia powłoki, pozostawiając uruchomiony program? Powiedzmy, że mój interfejs użytkownika ma problemy lub z jakiegoś powodu, muszę uruchomić program z okna terminala, powiedzmy, nm-applet :

nm-applet

Po uruchomieniu zajmuje pierwszą część okna terminala.

Czy istnieje prosty sposób na uruchomienie programu w tle bez konieczności opuszczania terminala, czy też zajmuje cały terminal?

W tej notatce znalazłem sposób na uruchomienie programów z terminala i zezwolenie na inne dane wejściowe, poprzez dodanie do polecenia ampersandu ( & ):

nm-applet &

Ale to nie ma większego znaczenia, ponieważ wszelkie procesy uruchomione w terminalu są zabijane, gdy terminal jest zamknięty.

    
zadawane OVERTONE 22.02.2012, 01:07
źródło

8 odpowiedzi

157

Niedawno polubiłem setsid . Zaczyna wyglądać tak, jakbyś właśnie uruchamiał coś z terminala, ale możesz odłączyć (zamknąć terminal) i to po prostu trwa.

Dzieje się tak dlatego, że polecenie faktycznie zignorowało i podczas gdy wejście przechodzi do bieżącego terminala, jest ono własnością zupełnie innego rodzica (który pozostaje żywy po zamknięciu terminala).

Przykład:

setsid gnome-calculator

Jestem też całkiem stronniczy od disown , który może być użyty do oddzielenia procesu od bieżącego drzewa. Używa się go w połączeniu ze znakiem ampersand:

gnome-calculator & disown

Nauczyłem się także nawiązywania podpowłok z nawiasami. Ta prosta metoda działa:

(gnome-calculator &)

I oczywiście jest nohup , o czym wspomniałeś. Nie jestem szalony w kwestii nohup , ponieważ ma tendencję do pisania do ~/nohup.out bez pytania. Jeśli polegasz na tym, może to być dla Ciebie.

nohup gnome-calculator

W przypadku procesów długoterminowych istnieją takie rzeczy, jak screen i inne wirtualne terminale-muxery, które utrzymują sesje przy życiu między połączeniami. Prawdopodobnie tak naprawdę nie dotyczą one ciebie, ponieważ chcesz tylko tymczasowy dostęp do wyjścia terminalu, ale jeśli chcesz wrócić jakiś czas później i wyświetlić ostatnią aktywność terminalu, ekran prawdopodobnie byłby najlepszy wybór.

Internet jest pełen samouczków screen , ale tutaj jest prosty szybki start:

odpowiedział Oli 22.02.2012, 01:41
źródło
47

Oto dwa sposoby, z którymi chciałbym pójść. Po pierwsze, nie uruchamiając go z terminala; hit Alt + F2 , aby otworzyć okno dialogowe uruchamiania i uruchomić je stamtąd (bez & amp;).

Z terminala uruchom

nm-applet &

Ale NIE zamykaj terminalu samodzielnie. Oznacza to, że nie należy naciskać przycisku X, aby zamknąć i nie używać opcji Plik - > Wyjdź z paska menu. Jeśli zamkniesz terminal w ten sposób, wyśle on sygnał HUP (Hang UP) do działającego basha, który z kolei wyśle sygnał HUP do wszystkich swoich dzieci (dlatego nohup działa w tym przypadku).

Zamiast tego wyjdź z powłoki, uruchamiając exit lub klikając Ctrl + D . bash wyłączy wtedy swoje dzieci, a następnie wyjdzie, pozostawiając procesy działające w tle. Po wyjściu bash terminal stracił proces potomny, więc również się zamknie.

Robi to wszystko naraz:

nm-applet & exit
    
odpowiedział geirha 23.02.2012, 12:45
źródło
13

Jak zauważyłeś, możesz uruchomić

nohup nm-applet &  

, aby zignorować sygnał końcowy podczas zamykania terminalu. Nie ma problemu z tym.

    
odpowiedział desgua 22.02.2012, 01:17
źródło
10

Jedną z rzeczy, których brakuje wielu innym odpowiedziom, jest oderwanie działającego procesu, który obecnie blokuje powłokę. W większości terminali i powłokach Ctrl + Z zatrzyma uruchomiony proces i przywróci monit wejściowy. Następnie możesz wydać

bg

, aby wysłać uruchomiony proces w tle. Problem

fg

zamiast tego przywraca działający proces na pierwszy plan.

EDYCJA : więcej szczegółów w tej odpowiedzi odkryłem później.

    
odpowiedział krlmlr 31.03.2015, 16:37
źródło
7

Użyj (exec PROGRAM &> /dev/null & ) , aby umożliwić przejęcie PID dla podpowłoki przez PROGRAM . Testowałem to podejście wiele razy z kilkoma różnymi programami. Zamknięcie oryginalnego terminala nie ma wpływu na nowo zainicjowany program

Małe demo:

$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working
    
odpowiedział Sergiy Kolodyazhnyy 30.11.2015, 12:35
źródło
2

Mogę polecić terminal byobu. Możesz łatwo odłączyć proces, naciskając klawisz F6.

    
odpowiedział speter 05.03.2013, 01:07
źródło
1

Chociaż istnieją dobre odpowiedzi powyżej, chciałbym dać moje 2 centy na to, jak używam MATLAB w tle.

sudo -b matlab

Tag -b sudo może uruchamiać aplikacje w tle. Możesz również zamknąć terminal po wykonaniu tego polecenia.

Prawdopodobnie nie ma to związku, ale istnieje wspaniała strona internetowa, której możesz użyć do wyjaśnienia poleceń powłoki. link

    
odpowiedział user3342981 28.06.2016, 16:39
źródło
0

Nie znam jej we właściwy sposób, ale zaczynam kolejną sesję, pozostawiając poprzednią. Na przykład uruchomiłem prosty serwer WWW na mojej malince. ten web.py. wtedy zaczynam nową sesję, pozostawiając ją w spokoju. to jest to. Jest również przydatny, ponieważ wciąż jesteś aktualizowany, nawet jeśli pracujesz nad drugą sesją.

    
odpowiedział leo 06.07.2016, 00:15
źródło

Przeczytaj inne pytania na temat tagów