reptyr – gdy screen nie został odpalony
Napisał: Patryk Krawaczyński
10/04/2012 w Administracja Brak komentarzy. (artykuł nr 343, ilość słów: 341)
R
eptyr jest narzędziem, które potrafi przenieść istniejący proces na inny terminal. Jeśli uruchomiliśmy przez “czyste” SSH dowolny proces, który okazał się bardzo czasochłonny, a nie możemy go przerwać – wystarczy w nowym terminalu uruchomić screen
i użyć reptyr
do jego przeniesienia na terminal z odpalonym screen
-em.
Użycie:
reptyr $PID
reptyr złapie PID procesu i przypiszę go do aktualnego pseudoterminala, z którego został uruchomiony:
agresor@darkstar:~$ reptyr 2926 [+] Allocated scratch page: b7790000 [+] Looking up fds for tty in child. [+] Resolved child tty: 8801 [+] Found an alias for the tty: 0 [+] Found an alias for the tty: 1 [+] Found an alias for the tty: 2 [+] Found an alias for the tty: 3 [+] Opened the new tty in the child: 5 [+] Target is not a session leader, attempting to setsid. [+] Forked a child: 2936 [+] Change pgid for pid 2926 [+] Did setsid() [+] Set the controlling tty
Proces do nowego terminala zostanie załączony razem wejściem i wyjściem – włączając w to możliwość użycia kombinacji Ctrl+C oraz Ctrl+Z (niestety jeśli przełączymy proces do pracy w tle – poleceń “bg” oraz “fg” będziemy musieli nadal używać w starym terminalu – dlatego lepiej użyć programu screen
do zawieszenia przechwyconego procesu). Ze względu na wykorzystywanie systemowego wywołania ptrace w Ubuntu od wersji 10.10 i wyższej – musimy wyłączyć mechanizm bezpieczeństwa zapobiegający przyłączania ptrace() do innych procesów:
echo 0 > /proc/sys/kernel/yama/ptrace_scope
W przeciwnym wypadku przy próbie użycia reptyr
otrzymamy komunikat:
Unable to attach to pid 2756: Operation not permitted The kernel denied permission while attaching. If your uid matches the target's, check the value of /proc/sys/kernel/yama/ptrace_scope. For more information, see /etc/sysctl.d/10-ptrace.conf
Zanim Nelson Elhage ponownie odkrył i napisał reptyr
– podobną funkcjonalność zapewniał skrypt Timo Lindfors’a napisany w 2004 roku – screenify wykorzystujący The GNU Project Debugger.
Więcej informacji: Reparent a running program to a new terminal