Niektóre aplikacje GUI uruchamiają się płynnie za pomocą wiersza poleceń Terminala, ale niektóre nie, i powodują, że Terminal czeka na zakończenie aplikacji. Nawet wtedy niektórzy nie zwalniają wiersza poleceń.
Tajemniczy &
sufiks ampersand wydaje się powodować, że terminal umieszcza proces w tle (ale nie jestem pewien, co się tam dzieje).
Czy istnieje sposób na uruchomienie aplikacji za pomocą terminala, aby nie było efektu „zawieszenia się”, podobnie jak uruchomienie czegoś za pomocą Alt+ F2?
Chciałbym, aby linia poleceń była ponownie dostępna natychmiast, bez niczego w tle i drukowania w terminalu.
command-line
gui
Peter.O
źródło
źródło
screen
(wspomniany przez Oli i RobinJ). Jestem pod wrażeniem jego możliwości; po przeczytaniu o nim i wypróbowaniu go ... To wymaga jedynie wpisania:screen -d -m gedit
(lubscreen gedit
następnieCtrl+a d
odłączenia) ... i nadal mam pełny dostęp do widoku terminala gedit (dla komunikatów ostrzegawczych itp.) w dowolnym momencie,screen -r
nawet jeśli w międzyczasie zamknąłem oryginalne okno terminala ...&
przyrostek polecenia. Może to być pomocne w wyjaśnieniu: jaka jest różnica między terminalem, konsolą, powłoką i wierszem poleceń?Odpowiedzi:
W przypadku gedit po prostu cały czas mam otwartą kopię. Tak długo, jak masz uruchomioną kopię, uruchamianie
gedit
połączeń z terminala, a następnie zamykanie terminala nie zabije gedit.W przypadku innych rzeczy to, co powiedzieliby inni ludzie, również zadziałałoby. Jestem fanem
nohup
... Ale jeśli potrzebujesz terminala, który możesz odłączyć, a następnie podłączyć ponownie, chcesz spojrzećscreen
.irssi
nawetwatch uptime
dobre przykłady.screen -r
i BOOM, wróciłeś.screen
jest znacznie większy i można go połączyć z,byobu
aby uzyskać lepszą jakość terminalu. Czytaj dalej.źródło
Załóżmy,
gedit
że program, który chcesz uruchomić, jest odłączony (alias. „Disowned”, „disentangled”, „decoupled”). Istnieją różne sposoby, w zależności od tego, co chcesz zrobić dokładnie:Program już działa
Zapierać się:
disown -h
jest właściwą drogą, jeśli chcesz to zrobić z już działającym programem (tj. jeśli go zapomniałeśnohup
). Najpierw musisz go zatrzymać za pomocą Ctrl+ Z. Następnie możesz umieścić w tle za pomocąbg [jobId]
(npbg 1
.). Otrzymasz listę uruchomionych zadań wraz z ich zleceniemjobs
. Następnie możesz oddzielić go od terminala za pomocądisown -h %[jobId]
. Przykładowa sesja terminalowa:Program jeszcze się nie rozpoczął
nohup
nohup
nie zawsze jest obecny na wszystkich komputerach. Jeśli wiesz, że chcesz wcześniej odłączyć, użyjesz:Może chcesz przekierować wyjście powłoki, jak również i swój program do źródła sygnału pseudo, więc:
nohup ./myprogram > foo.out 2> bar.err < /dev/null &
. Chcesz przekierować dane wyjściowe, aby nie drażnić się nimi lub użyć ich później. Dane wejściowe o wartości NULL mogą pomóc w zapobieganiu błędom w ssh.Podkładka:
Możesz osiągnąć podobny efekt przez
Nawiasy otwierają nową podpowłokę, w której można uruchomić gedit.
>/dev/null 2>&1
Przekierowuje wyjście powłoki do nikąd (pomijanie wyjścia). A&
na końcu umieszcza proces w tle.Multipleksowanie terminali
Także multipleksowanie terminali przy użyciu ekranu lub Byobu . Zasadniczo uruchamiasz program we własnym terminalu. Naprawdę mogę polecić byobu również z innych powodów. Poniżej znajduje się lista skrótów boybu, które mogą się przydać przy pierwszych krokach:
Przydatny:
Mniej przydatne:
Demon „at” i inne
at
jest fajnym, przydatnym, małym narzędziem do uruchamiania poleceń w zaplanowanym czasie. Można „nadużyć”, aby odłączyć polecenie od powłoki:Możesz także zajrzeć do
setsid
istart-stop-daemon
, ale inne metody powinny wystarczyć.źródło
bg %1
ciebie możesz po prostu wpisaćbg
.Robi to i często jest tym, czego chcesz. Jeśli zapomnisz użyć &, możesz zawiesić program za pomocą ctrl-z, a następnie umieścić go w tle za pomocą polecenia bg - i nadal używać tej powłoki.
Stdin procesu, stdout i stderr procesu są nadal podłączone do terminala; możesz przekierować je z / do / dev / null lub dowolnego innego pliku (np. zapisać gdzieś log wyjściowy), zgodnie z potrzebami:
Możesz zobaczyć proces w zadaniach, przenieść go z powrotem na pierwszy plan (polecenie fg) i wysłać sygnały (polecenie zabicia).
Niektóre programy graficzne odłączają się od terminala; w takim przypadku po uruchomieniu polecenia „normalnie” zauważysz, że uruchamia on program graficzny i „wychodzi”.
Oto krótki skrypt , który możesz umieścić w ~ / bin , który nazwałem runbg:
Sprawdzam program ($ prog) przed przekierowaniem, aby można było zgłaszać błędy w jego zlokalizowaniu. Uruchom jako „runbg your-command args ...”; nadal możesz przekierować stdout / err do pliku, jeśli chcesz gdzieś zapisać dane wyjściowe.
Z wyjątkiem przekierowań i obsługi błędów jest to odpowiednik odpowiedzi htorque .
źródło
ctrl-z
(zawieszenie) daje mi dostęp do wiersza poleceń, ale wykasowuje GUI, dopóki niebg
wydaję, co wydaje się cofać zawieszenie. (ma sens) ... Czy jest jeszcze jedno polecenie, za pomocą którego mogę odłączyć GUI ... Aha! Rozumiem teraz, co masz na myśli przezsighals (kill command)
... (ciekawe rzeczy, te sygnały) .. Użyłem fragmentu kodu, abydd
stopniowo generować statystyki ... i użyłemkill
+ SYGNAŁU ... Czy jest jakiś SYGNAŁ do odłączenia "zadania „?disown
zadania -p gedit`` i wyglądało na to, że usunąłem zadanie .... (ale dostałem komunikaty systemowe w terminalu, kiedy ręcznie zamknąłem gedit ... ale myślę, że Mam w tej chwilijobs -p command
jeśli w tle działa wiele instancji jednego polecenia. możesz użyć,jobs
aby znaleźć odpowiedni identyfikator zadania, a następnie zrobić,jobs -p <job-id>
aby uzyskać PID zadania. Osobiście uważam wersję z podpowłoką za znacznie łatwiejszą. ;-)gedit & disown
Aby uruchomić aplikację i odłączyć ją od uruchomionego terminala, użyj & !.
źródło
disown <pid-of-command>
po uruchomieniu polecenia w tle.Posługiwać się
nohup
Na przykład:
źródło
nohup
? Proszę opracować.nohup
należy zastosować w tym scenariuszu.nohup
Aplikacji (adisown
wbudowane bash) nie pozwalają na sygnał, aby osiągnąć aplikację.nohup
utworzenie pliku w bieżącym katalogu o nazwienohup.out
. Zobacz stronę podręcznika, aby uzyskać więcej informacji. Wolędisown
z tego powodu i dlatego, żedisown
działa po uruchomieniugedit
.Otwórz terminal, wpisz screen , wpisz polecenie, które chcesz uruchomić, zamknij terminal. Program powinien nadal działać w sesji GNU Screen .
źródło
To działało dla mnie:
źródło
xdg-open
Zobacz to narzędzie ogólnego zastosowania: https://linux.die.net/man/1/xdg-open
Spowoduje to otwarcie względnej lokalizacji w menedżerze plików.
Spowoduje to otwarcie pliku pdf w czytniku pdf.
Możesz nawet podać adresy URL
źródło
Jak wielu ludzi uznało, nie należy brać pod uwagę niczego. Ale nic nie zatrzymuje się na terminalu i wyświetla irytującą aktywność programu na terminalu. Możesz po prostu zamknąć terminal, aby tego uniknąć. Odkryłem bardzo proste obejście, którego używam.
I to wszystko. Otwiera gedit i zamyka terminal po uruchomieniu gedit. Ponieważ gedit nie jest teraz powiązany z terminalem, pozostaje aktywny.
źródło
Działa to nawet wewnątrz skryptu (podobnie jak aliasy, zwiastun „&” zwykle nie jest dozwolony w skryptach, ponieważ nie są interaktywne):
źródło
To działało dla mnie:
źródło