Rozważ następujące nohup
wykonanie:
nohup script.sh > script.out &
Czy istnieje sposób na wylogowanie się z terminala, ponowne połączenie, przywrócenie procesu na pierwszy plan i interakcję z nim za pomocą klawiatury?
command-line
process
background
nohup
Adam Matan
źródło
źródło
nohup nie odłącza polecenia od terminala, powoduje, że skrypt jest ignorowany
SIGHUP
i przekierowujestdout/stderr
do plikunohup.out
, dzięki czemu polecenie może być dalej uruchomione w tle po wylogowaniu.nohup
nie umieszcza automatycznie polecenia w tle. Trzeba to zrobić jawnie, kończąc linię poleceń znakiem&
.jobs
może wydrukować aktualnie uruchomione zadania i ich status. Jeśli poleceniejobs
nie może go znaleźć, to nie jest już procesem potomnym tej powłoki.Można przywrócić zadanie tła na pierwszy plan w trybie bash,
fg
nawet jeśli jest ono uruchomionenohup
. Ale to nie zmieni przekierowania wyjściowego, które nadal będzie przechodzić do plikunohup.out
.Jeśli zamkniesz powłokę / terminal lub wylogujesz się, twoje polecenie nie będzie już potomkiem tej powłoki. Należy do
init
procesu. Jeśli przeszukaszpstree
, zobaczysz, że jest teraz własnością procesu 1 (init
). Tego nie można przywrócić na pierwszy plan, ponieważ pierwszy plan już nie istnieje.źródło
If the command jobs cannot find it, then it is no longer a child process of that shell.
To jest złe: spróbuj tę sekwencję, aby zobaczyć, jak:sleep 100 & disown ; echo Jobs:; jobs; echo Tree:; pstree -ap $$
. Po tym poleceniu nadal będziesz widziećsleep
pracę z tym samym PID wydrukowanym podczas jego odradzania, ajobs
nic nie wydrukuje. Jedynym sposobem, w jaki proces potomny może przestać być dzieckiem, jest utrata rodzica (wtedy sierota staje się dzieckieminit
) lub rozwidlenie + wyjście (ale wtedy zmienia się PID, więc nie jest to pierwotne dziecko).Poproszę użycie terminala, ale tmux , a nie screen. Ekran jest, dla wszystkich celów i celów, niezachowany. Jego konfiguracja jest mroczną sztuką, prawdopodobnie po raz pierwszy zapisaną w dodatku do Necronomicon. Próba napisania własnej konfiguracji jest jak rzut oka na Cthulu. Poważnie. Rozejrzyj się za plikami .screenrc . Dla pewności istnieją sposoby na mediację wstrętem do pliku konfiguracyjnego. Byobu wykonuje godną podziwu pracę jako zasłona między śmiertelnymi użytkownikami i bezbożnym kodem. Ma rozsądne kolory, interfejs menu i, co najważniejsze, pasek stanu.
Ale jak powiedziałem, zamiast tego polecam tmux . Nadal wymaga niewielkiej konfiguracji, ale jest dobrze udokumentowany , a plik konfiguracyjny nie będzie wyglądał jak bełkot. Zaczynasz też od kolorów i paska stanu. Porównaj moje pliki screenrc i tmux.conf:
źródło
Jeśli interesuje Cię tylko wygląd czapki na żywo, może ci to odpowiadać:
źródło
Każde polecenie Linuksa można wysłać w tle z
&
dołączonym na końcu „”.Aby wyświetlić wszystkie zadania w tle, możesz wystawić
jobs
Tutaj prowadzę 3 zadania w tle: Zookeeper, Kafka i Mongo Daemon. [1], [2] i [3] są odpowiednimi numerami zadań dla tych zadań.
Możesz przenieść te zadania na pierwszy plan, używając
fg %$taskNumber.
źródło