czasami uruchamiam aplikację na terminalu gnome, ale potem nagle muszę ponownie uruchomić gnome lub coś w tym rodzaju. Wydaje mi się, że odpowiedź na pytanie jest również przydatna, więc chcę odłączyć się od SSH, w którym coś się dzieje.
Drzewo terminali Gnome wygląda następująco:
gnome-terminal
bash
some-boring-process
Nie mogę odłączyć " bash
od gnome-terminal
(lub odłączyć some-boring-process
od bash i przekierowanie jej gdzieś wyjściowego)? Jeśli tylko zabiję gnome-terminal
, zabiją mnie bash
wszystkie podprocesy
Odpowiedzi:
Jeśli
some-boring-process
trwa bieżąca sesja bash:ctrl-z
aby dać ci monit bashbg
jobs
poleceniadisown -h %1
(zamień tam rzeczywisty numer zadania).To nie robi nic, aby przekierować wyjście - musisz o tym pomyśleć po uruchomieniu nudnego procesu. [Edytuj] Wydaje się, że istnieje sposób na przekierowanie go https://gist.github.com/782263
Ale poważnie, spójrz na ekran. Mam powłoki na zdalnym serwerze, które działają od miesięcy.
źródło
screen
Czasami już używam , chociaż ma to swoje problemy i nie chcę go używać do każdej sesji bash w moim życiubash: bg: current: no such job
?Właśnie do tego stworzono screen i tmux . Uruchamiasz powłokę w sesji screen / tmux i możesz dowolnie rozłączać / łączyć się ponownie. Możesz również mieć wiele sesji powłoki uruchomionych w jednym terminalu gnome.
źródło
screen
ma swoje problemy i nie mam ochoty używać go do każdej sesji bash w moim życiuscreen
,tmux
lubdtach
(prawdopodobnie zdvtm
) są do tego świetne, ale jeśli jest to coś, w którym nie pomyślałeś o użyciu jednego z nich, możesz być w stanie wykorzystaćnohup
.źródło
screen
ma swoje problemy i nie mam ochoty używać go do każdej sesji bash w moim życiunohup
działa on na działającym procesie przy użyciu-p
opcji (jeśli jest dostępna).-p
opcji nanohup
stronach podręcznika; na jakim systemie jesteś?tmux
, skorzystałem z-p
opcji na pudełku Solaris. Mam również niejasne wspomnienia z robienia tego na pudełku CentOS kundla (być możezsh
ma wbudowaną, która to obsługuje?), Ale nie mogę znaleźć żadnych dokumentów na ten temat.bash
, anizsh
w moim systemie Ubuntu Linux dostarczyćnohup
.Jeśli chcesz nadal wchodzić w interakcje z procesem potomnym, a nie tylko tworzyć jego tło i kontynuować, istnieje program o nazwie retty, który jest dowodem koncepcji „kradzieży” procesu z jego bieżącego tty i ponownego przyłączenia go do obecny.
Robi to jednak okropne rzeczy, w tym przyklejenie kodu asemblera do stosu ponownie dołączonej aplikacji. I ten kod nie został zaktualizowany dla x86_64.
Istnieje inny program, który może być lepszym rozwiązaniem, zamrażając proces w przestrzeni użytkownika do pliku, z którego można go później przywrócić (być może na innym tty). To jest kriopid , a ten projekt również wydaje się być zatrzymany w faza weryfikacji koncepcji i nie działa z nowoczesnym Linuksem w obecnym kodzie. Ach tak.
Pomyślałem, że to powinno być tutaj dla kompletności. Jeśli nie masz nic przeciwko uciekaniu się do okropnego voodoo, jest to możliwe - przynajmniej teoretyczna.
źródło
Jeśli odpalę coś, co chcę zakończyć bez względu na wszystko (poza ponownym uruchomieniem systemu), używam go
nohup
i uruchamiam w tle. W przeciwieństwie do ekranu i podobnych nie można ponownie podłączyć się do procesów. Jednak blokowanie przekierowania w innym miejscu można znaleźć w dowolnym pliku wyjściowymnohup.out
.Używam,
screen
gdy chcę być w stanie przełączać terminale dla procesu. Takich jak rozpoczęcie procesu od domu / pracy i przejście do drugiego. Jak każda inna sesja wyjściowa, wynik ostatecznie przewinie górną część bufora.EDYCJA: Jeśli proces został już uruchomiony, możesz
disown
go zablokować, aby zapobiecHUP
wysyłaniu sygnału po zamknięciu procesu.źródło
screen
ma swoje problemy i nie mam ochoty używać go do każdej sesji bash w moim życiuMożesz sprawić, aby proces (PID) nie odbierał sygnału HUP po zakończeniu sesji terminala. Użyj następującego polecenia:
źródło
nohup: invalid option -- 'p'
. Jakiej wersjinohup
używasz na jakim systemie?-p
opcji w Linuksie, więc ta odpowiedź jest specyficzna dla Solaris i AIX.Ten skrypt odłącza proces potomny od rodzica i przypisuje go do procesu inicjowania :
źródło