Jeśli zadanie jest już uruchomiony, to zbyt późno *
, aby rozważyć alternatywne rozwiązania, wkładka dodatkowa warstwa między ssh
sesji i powłoce uruchamiając komendę, jak screen
, tmux
, byobu
, nohup
i lubi.
Jeśli twoje wsparcie procesu, które ma być umieszczone w tle, a szczególnie nie zawiesza się, stdout
i stderr
jest niezapisalne / zamknięte, możesz umieścić je w tle przed wylogowaniem, ControlZa bg
następnie odłączyć od powłoki z disown
wbudowanym.
na przykład:
$ ssh localhost
You have new mail.
Last login: Fri Jun 6 11:26:56 2014
$ /bin/sleep 3600
^Z[1] + Stopped /bin/sleep 3600
$ bg
[1] /bin/sleep 3600&
$ jobs
[1] + Running /bin/sleep 3600
$ disown %1
$ exit
Connection to localhost closed.
$ ps -ef|grep sleep
jlliagre 12864 1 0 21:12 ? 00:00:00 /bin/sleep 3600
jlliagre 13056 12477 0 21:13 pts/18 00:00:00 grep sleep
$
*
Jak zauważył Bob, istnieje kilka hackerskich sposobów na odtworzenie sesji tty pod Linuksem. repty, retty , injcode i neercs . Najbardziej zaawansowany wygląda na reptyr, ale możesz potrzebować uprawnień roota, aby umożliwić ptrace włamanie się do twojego procesu.
disown
polecenie. Zwrócił: bash: ostrzeżenie: usunięcie zatrzymanego zadania 1 z grupą procesów 24876. Teraz moje zadanie jest wymienione,ps -all
ale wydaje się, że nie działa (zużycie procesora wynosi 0%)disown
poleceniembg
polecenie było wymagane w pierwszej części mojej odpowiedzi. Edytowane.kill -CONT
czym robi to mniej więcej tyle samo, co bg.Jednym z rozwiązań jest użycie ekranu GNU . Możesz uruchomić
screen
, uruchomić polecenie, a następnie odłączyćC-a d
. Później, aby połączyć się ponownie, zrób toscreen -r
i wrócisz do poprzedniej sesji.Inne zalety ekranu to zarządzanie oknami (dzięki czemu możesz przełączać się na inne powłoki podczas działania polecenia, bez potrzeby nowego połączenia SSH) i pozwala on pozostać na pierwszym planie, zarówno w bieżącej sesji, jak i późniejszej.
Edycja: Jak zauważono w komentarzach, zadziała to tylko wtedy, gdy pamiętasz, aby rozpocząć
screen
przed uruchomieniem polecenia. Jeśli polecenie jest już uruchomione, będziesz potrzebować rozwiązania @ jlliagre.źródło
tmux
to inny taki program,screen
który pozwala na zdalną sesję, która nie jest powiązana z bieżącym połączeniem SSH.screen
.screen
lubtmux
.)Jednym ze „standardowych” sposobów, aby to zrobić, jest użycie
nohup
zawartej w nim komendycoreutils
:Ale polecenie przekieruje dane wyjściowe (
STDOUT
iSTDERR
AFAIK) programu do plikunohup.out
, co czasami będzie denerwujące (jak generowanie dużego pliku dziennika), więc możesz chcieć dokonać własnego przekierowania lub przekierować go do / dev / null Jeśli chcesz.źródło
nohup
można do tego użyć. Wystarczy zawiesić uruchomiony proces i wysłać go do tła (Ctrl
+Z
i uruchomićbg
), a następnie możesz go wydaćnohup %1
.Oprócz tego
nohup
możesz uruchomić proces w tle za pomocą „&” i podpowłoki:Dodaj komendę do znaku & i zawiń ją w nawiasach
Powiedzmy, że twój proces zyskuje pid 1922:
Spójrz, że nie jest przyłączony do procesu powłoki 11473, który był jego pierwotnym rodzicem. Tak więc, jeśli wyjdziesz lub zabijesz bieżącą powłokę (11473), proces 11922 będzie działał dalej i zostanie on odłączony od pts.
Spróbuj opuścić powłokę i wprowadzić nową powłokę. Nawet jeśli ta powłoka jest połączona z tymi samymi punktami, możesz teraz zobaczyć proces bez pts:
Nie wiem, jak to się nazywa i dokumentuje w Posix, ale używam tego od 1990 w bsh, ksh, a teraz w bash.
Na koniec możesz użyć
bg
wbudowanego polecenia powłoki:Po prostu uruchom program i jeśli zdecydujesz się go zatrzymać lub planujesz zachować go w tle, wpisz CTRL + Z:
Teraz pozwól mu dalej działać w tle:
Jeśli spojrzysz na informacje o procesie, ma on jeszcze proces nadrzędny:
Wyjdź z bieżącego procesu. Uruchomiony proces w tle jest odłączony od oryginalnego elementu nadrzędnego i działa w tle:
Zaloguj się ponownie i spójrz na informacje o procesie:
źródło