Respuestas:
Teniendo en cuenta cómo funcionan los trabajos de Linux y la propiedad del proceso, me temo que no es realmente posible volver a ser propietario de un proceso, sin la ayuda del proceso de adopción.
Un padre puede 'repudiar' a un hijo, que luego es 'adoptado' por el proceso llamado 'init'. La seguridad del sistema evita que alguien tome los procesos de otra persona. Cuando lo desconoces, un proceso se convierte en el control de otra persona (init). Usted, como 'usuario', aún podría matar el proceso, pero no puede recuperarlo. Es poco probable que intente obligar a init a devolver su proceso, ya que init ni siquiera lee el correo.
Tan malo como suena, realmente se reduce a la respuesta de "¡No hagas eso!".
reptyr
(vea mi respuesta para un ejemplo de uso).
Si bien supongo que esto no ayuda a nadie en la desafortunada situación de haber repudiado el proceso incorrecto, si fuera a desterrar su flujo de trabajo y reemplazarlo con:
https://github.com/nelhage/reptyr
Sería capaz de reparar cualquier proceso (es decir, moverlo dentro de la pantalla).
reptyr
es la solución, pero no hay necesidad de dejar de usar disown
. Para mayor claridad, he escrito una nueva respuesta.
Todo lo que necesita es reptyr
. Vive en GitHub y se ha empaquetado para Debian desde Wheezy, y probablemente también para otras distribuciones de GNU / Linux. Pondrá en primer plano su proceso denegado en el terminal actual si lo invoca con su ID de proceso (PID). Así por ejemplo:
pgrep -f DISOWNED_PROCESS # to find out the PID of the disowned process
reptyr PID # insert this PID here
Lo siento, no. En principio, sería posible, ya que el rechazo simplemente cambia algún estado interno del shell: básicamente elimina la identificación del proceso de una lista, y podría volver a colocarse sin demasiados problemas (tendría que ser un poco cuidadoso al probar que el pid conectado nuevamente está en la sesión correcta, pero eso no es insuperable). Pero ninguno de los shells habituales (bash, ksh, tcsh, zsh) parece tener una forma de volver a agregar. (Aunque con zsh se puede escribir en el jobstates
, jobdirs
y jobtext
matrices asociativas; no sé cuánto se puede lograr de esa manera.)
Si desea que el shell envíe señales al proceso desautorizado como lo hace para sus subprocesos propios, puede escribir un trabajo auxiliar que espere hasta que reciba una señal y envíe la misma señal al proceso desautorizado. Puede enviar SIGSTOP
y SIGCONT
al proceso denegado para simular Ctrl+ Zy bg
. Nada de esto será tan conveniente como volver a ser propietario.
Cuales son las circunstancias? Si solo desea recuperar su terminal por un tiempo, puede usar GNU Screen en su lugar. No bastante separar el proceso desde un terminal - emula una pantalla para el beneficio del proceso - pero se puede conectar y desconectar desde el terminal real que está utilizando. Incluso puede separar una pantalla, cerrar sesión, volver a iniciar sesión y volver a adjuntarla a la misma pantalla.