Terminal pogryzł człowieka: reptyr
Każdy popełnia czasami błędy. Jak np. uruchomienie długotrwałego procesu (powiedzmy – wget, make) na zdalnej sesji, którą musimy zamknąć, bo np. opuszczamy lokal. W takich chwilach człowiek oddałby wszystko, aby móc „wrzucić” uruchomiony proces w tło i reaktywować go za jakiś czas ponownie ale już z domu. Nic wielkiego, wystarczy opanować użytkowanie polecenia reptyr.
Aby sprawnie posługiwać się reptyr, należy go doinstalować. Nie zaszkodzi również obecność w systemie screen. Czyli wykonujemy w Ubuntu, Mincie lub Debianie:
sudo apt-get install reptyr screen
Teraz otwieramy terminal i uruchamiamy jako użytkownik polecenie np. top. Otwieramy kolejny terminal i tam aktywujemy screen (wpisując takie polecenie). Tam też sprawdźmy numery PID naszych procesów:
#$ screen
#$ ps -a
PID TTY TIME CMD
12986 pts/1 00:00:00 top
12987 pts/2 00:00:00 screen
12999 pts/3 00:00:00 ps
Ponieważ chodzi nam o przeniesienie top, wykonujemy (pracujemy cały czas w terminalu z uruchomionym screen):
#$ reptyr 12986
Uwierzcie lub nie, ale w pierwszym terminalu zaobserwujemy:
[1]+ Zatrzymano top
… a w drugim pojawi się wynik prac naszego polecenia (w tym przypadku top). Co to oznacza? Ano to, że teraz spokojnie możemy zamknąć pierwszy terminal (PID 12986 nie jest już z nim związany), natomiast w drugim terminalu „mrozimy” screen za pomocą ctrl + a + d. Teraz również i ten terminal będziemy mogli zamknąć, a do naszego programu biegającego w tle dostaniemy się kiedykolwiek i skądkolwiek za pomocą screen -r.
Dla osób które otrzymują komunikat permission denied podczas próby takiego „przejęcia”:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
ctr+z
bg; disown
Dzięki, zastanawiam się jak reptyr działa…