Reptyr: quando screen non basta

Lo scenario è questo: vi collegate alla vostra Linux box via SSH, avviate un processo che si rivela molto lungo ma non avendo avviato il processo con screen non potete disconnettere la connessione SSH senza interrompere il processo. Con reptyr è possibile riagganciarsi al processo avviato da un altro terminale in cui si utilizzi GNU screen (se non sapete usarlo qui trovate un bel quickstart), consentendo in questo modo di sganciarsi e riagganciarsi senza interrompere il processo in corso.

Il funzionamento di reptyr è veramente semplice:

reptyr PID

dove a PID dovremo sostituire il process ID del processo a cui vogliamo agganciarci.

Vediamo lo scenario d’uso descritto in 4 step per far capire come funziona reptyr:

  1. Ci si collega al proprio sistema Linux via SSH, si avvia l’editor nano e si inizia a modificare un file
  2. Si avvia un’altra connessione SSH con il sistema Linux e si lancia screen. Con top o un ps aux si individua il PID di nano (supponiamo sia “1973”)
  3. agganciamoci al PID di nano con reptyr, dando il comando “reptyr 1973”

A questo punto nel terminale di screen ci troveremo difronte a nano e potremo continuare a modificare il file.

Reptyr è facilmente compilabile dai sorgenti scaricabili da GitHub, basta portarsi nella directory scompattata dei sorgenti e dare un “make&&sudo make install”. Su Debian funziona senza altre modifiche (io l’ho testato su Squeeze) mentre se lo volete provare su Ubuntu è necessario modificare da root il file /etc/sysctl.d/10-ptrace.conf inserendo “kernel.yama.ptrace_scope = 0” oppure per una modifica che sia solo temporanea basterà dare:

# echo 0 > /proc/sys/kernel/yama/ptrace_scope

Questa modifica permette a reptyr di usare la syscall “ptrace” per agganciarsi al programma remoto.