Pregunta ¿Es posible separar un proceso de su terminal? (O, "debería haber usado la pantalla!") [Duplicar]


Posible duplicado:
¿Puedo nohup / screen un proceso ya iniciado? 

En Unix (específicamente, Linux), comencé un trabajo en una sesión regular de ssh-> bash. Me gustaría dejar el trabajo pronto, pero ahora me doy cuenta de que el trabajo tomará varias horas.

Si acabara de comenzar este trabajo en pantalla, podría separarme e ir a casa. Pero no lo hice.

¿Hay alguna forma de desconectar el trabajo de su sesión de ssh, así que puedo apagar mi computadora (descartando la conexión TCP y anulando la sesión de ssh) y aún así tener el programa en ejecución?

No me importa su salida; de hecho, redirigí la salida estándar a un archivo. Sólo quiero que se ejecute hasta su finalización.


116
2017-07-01 22:16


origen




Respuestas:


Puede presionar ctrl-z para interrumpir el proceso y luego ejecutar bg para que se ejecute en segundo plano.

Puede mostrar una lista numerada de todos los procesos en segundo plano de esta manera con jobs.

Entonces puedes correr disown %1 (reemplazar 1 con el número de proceso de salida por jobs) para separar el proceso del terminal.

A pesar del nombre, el proceso seguirá siendo de su propiedad después de ejecutar disown, simplemente se desconectará de la terminal en la que lo inició.

Esta respuesta tiene más información.


156
2017-07-01 22:26



¿Qué tan seguro es intentar este procedimiento? ¿Alguna trampa? - ndemou


Creo que el comando que estás buscando es "disown"


17
2017-08-19 16:32





Desde dentro de su shell bash:

control+z

Luego, para continuar ejecutando el trabajo en segundo plano:

bg

Más tarde, puede escribir jobs  para ver si su proceso todavía se está ejecutando.


8
2017-07-01 22:23



¿No será matado cuando cierre mi caparazón? - mike
No. Bueno, al menos no si estás corriendo bash. El trabajo se separará del PPID de su sesión ssh y seguirá ejecutándose en el servidor como su nombre de usuario. - Joe
Las instrucciones anteriores harán que el proceso se cierre cuando cierre el shell. Además, debe ejecutar el comando / disinado 'disown' (esto está en bash), que desasociará el proceso del shell y no enviará la señal HUP al proceso de salida. - Mark
En mi versión de bash [3.2.25 (1) -release (i686-redhat-linux-gnu)], probé el proceso y no tuve que rechazar el trabajo antes de desconectarme. El PID secundario se desconectó del PID principal y siguió funcionando como mi nombre de usuario sin interrupción. YMMV, supongo. - Joe


Cuando usas reptyr Dentro de la pantalla, puede mover el proceso (o su salida) a la pantalla.


5
2018-05-16 14:07





Utilizar
comando nohup &

Es bonito:
root @ index: ~ # nohup / usr / bin / curl localhost / begemot.php &
[1] 894
root @ index: ~ # nohup: ignorando la entrada y agregando la salida a `nohup.out '

y salida de este terminal, una tarea procederá a continuar ...

5
2018-05-24 09:23





Usar crtl-Z luego bg o usar & cuando se ejecuta el comando no es confiable al 100%. Funcionará en la mayoría de los casos, pero puede que no funcione como se espera en algunos casos (uso de E / S, ...).
La pantalla es una solución confiable.


4
2017-07-01 22:34



Tenga en cuenta que retty (pasky.or.cz/~pasky/dev/retty) es una herramienta que puede permitirle mover un proceso que se ejecuta fuera de la pantalla a la pantalla. Puede ser útil poner tu trabajo en una pantalla si lo olvidas. Entonces puede separar la pantalla de forma segura sin riesgo de que el trabajo se detenga. - radius


Me he puesto a configurar screen para ejecutar automáticamente cuando me conecto a los hosts que utilizo regularmente, para evitar este problema.

http://tlug.dnho.net/?q=node/239 Es una forma de hacerlo, aunque hay otras variaciones por ahí.

Me ha salvado una o dos veces cuando tuve una desconexión inesperada en la mitad de la sesión y de lo contrario me hubiera olvidado de comenzar screen Antes de que empecara algo de largo aliento.


4
2017-07-01 22:50





Si está usando bash, puede sospechar con control-Z y fondo con bg.

Control de trabajo (de man bash)

 If the operating system on which bash is running supports job 
 control, bash contains facilities to use it.   Typing the  
 suspend  character  (typically ^Z, Control-Z) while a process 
 is running causes that process to be stopped and returns control 
 to bash.  Typing the delayed suspend character (typically ^Y, 
 Control-Y) causes the process  to  be stopped  when  it  
 attempts to read input from the terminal, and control to be 
 returned to bash.

ayuda bg

bg: bg [job_spec ...]
    Place each JOB_SPEC in the background, as if it had been started with
    `&'.  If JOB_SPEC is not present, the shell's notion of the current
    job is used.

trabajos de ayuda

jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.

3
2017-07-01 22:23



¿No se eliminará cuando apague mi computadora, cortando así la sesión de SSH y matando el shell? - mike
Espere, ¿está ejecutando el comando en su computadora local y usando SSH para alguna entrada / salida? ¿O está funcionando en la computadora remota? Si el comando se está ejecutando en la computadora remota, entonces debería poder ponerlo en segundo plano y desconectarlo. - Zoredache


Si sabe de antemano que desea que se ejecute en segundo plano, el comando unix a Es una buena opción. Inicia los comandos en segundo plano a la hora programada, al igual que un trabajo cron que no se repite. Dependiendo de su distribución, es posible que necesite instalarlo e iniciar el demonio atd.


2
2018-04-04 12:58