¿Cómo reclamo un proceso rechazado?

12

Similar a muchas preguntas anteriores, me encontré ejecutando un trabajo que desearía haber ejecutado en la pantalla. Me vi obligado a rechazar el proceso porque necesitaba desconectarme. Ahora que me he vuelto a conectar, veo que el proceso aún se está ejecutando. ¿Cómo puedo "reclamar" el proceso, para poder ver su salida y darle entrada?

Esta pregunta es distinta de simplemente mover un proceso en ejecución a la pantalla, ya que implica la reapertura de identificadores perdidos stdin / out / err.

Sparr
fuente

Respuestas:

6

Esta es una pregunta duplicada: consulte Mover un proceso que ya se está ejecutando a la pantalla , que apunta a retty , que es un hack horrible que se describe a sí mismo y que implementa lo que siempre supuse que podría ser posible pero que nunca intenté: encuentra fd 0, 1 , y 2 (entrada, salida y error estándar, respectivamente) para el proceso y se adjunta a ellos, como un horrible parásito aberrante que no debería estar.

mattdm
fuente
No sabía sobre este programa, aunque la verdad sea dicha, ¡no es una buena práctica usarlo! Buena respuesta, independientemente.
Andrew M.
6

Al rechazar el proceso, está diciendo efectivamente que quiere ignorar los SIGHUP emitidos por el terminal. Una vez que cierre su sesión (digamos, bash), este proceso pasará a ser propiedad de init. Entonces, cuando dice que desea volver a ser propietario de un proceso después de haber renunciado a la propiedad, está diciendo que desea quitar la propiedad de otro proceso, que no está implementado, y por una buena razón. Esto simplemente no es posible hacerlo con gracia en Linux.

Andrew M.
fuente
1
Los procesos no poseen otros procesos como ese. Un proceso rechazado todavía se está ejecutando como usted.
mattdm
Lo hacen una vez que la sesión para padres se ha cerrado, como lo indica su pregunta. Actualicé mi respuesta para reflejar esto.
Andrew M.
El proceso padre cambia a init, pero eso es diferente de la propiedad. El EUID y UID del proceso siguen siendo los del usuario original. De lo contrario, esto podría ser potencialmente explotable, porque de repente cada usuario tendría una forma de ejecutar código como otro usuario, y un usuario del sistema no menos.
mattdm
1
EUID / UID! = PPID. Estoy hablando de la propiedad del proceso, no de los permisos.
Andrew M.
Sí, creo que estamos de acuerdo en todo, excepto en el significado del término "propiedad del proceso". Esto se refiere a la identificación de usuario con la que está asociado el proceso, no a su proceso padre. Tal vez la confusión se deba al disowncomando específico de bash, que, a pesar del nombre, en realidad no tiene nada que ver con cambiar la propiedad del proceso.
mattdm