Ho un programma in esecuzione su una shell SSH. Voglio metterlo in pausa ed essere in grado di riattivarne l'esecuzione quando torno.
Un modo in cui ho pensato di farlo era trasferire la sua proprietà su una shell dello schermo, mantenendola così in esecuzione.
C'è un modo diverso di procedere?
Risposta accettata:
Puoi revocare la "proprietà" del programma dalla shell con il disown
integrato:
# press Ctrl+Z to suspend the program
bg
disown
Tuttavia questo dice solo alla shell di non inviare un SIGHUP
segnala al programma quando la shell esce. Il programma manterrà qualsiasi connessione che ha con il terminale, di solito come input, output e flussi di errore standard. Non c'è modo di ricollegarli a un altro terminale. (Lo schermo funziona emulando un terminale per ogni finestra, quindi i programmi sono allegati alla finestra dello schermo.)
È possibile ricollegare i descrittori di file a un file diverso allegando il programma in un debugger (cioè usando ptrace
) e facendolo chiamare open
, dup
e close
. Ci sono alcuni strumenti che fanno questo; questo è un processo complicato e a volte si bloccano invece il processo. Le possibilità includono (collegamenti raccolti dalle risposte a Come posso rinnegare un processo in esecuzione e associarlo a una nuova shell dello schermo? e Posso nohup/schermare un processo già avviato?):
- afferra (e il criopide più ambizioso)
- nervosi
- reindirizzamento
- rettile
- Retta