¿Es posible cambiar el proceso padre de un proceso? Si es así, ¿cómo?
Por ejemplo,
¿Cómo se las
screen
arregla para adjuntar unascreen
sesión y los procesos que se ejecutan dentro de ella a diferentes procesos de shell? ¿Hay cambio en el proceso de los padres?Parece haber oído hablar de otras formas de cambio del proceso de shell en las que se ejecuta un programa, pero no me acuerdo. ¿Existe también un cambio en el proceso para padres del programa?
Pensé que
disown
un proceso cambia el proceso padre del proceso, simplemente porque el nombre lodisown
implica. Pero descubrí que no es cierto.El cliente Emacs puede conectarse al servidor emacs en una pestaña de terminal diferente. ¿Hay cambio en el proceso de los padres?
getppid(2)
el núcleo maneja las llamadas , las llamadas al sistema y las llamadas al sistema. Un programa podría confundirse al emitir esa llamada, guardar el valor y luego usar ese valor después de que su parentesco haya cambiado. Existe la posibilidad de una condición de carrera aquí.
disown
solo elimina un elemento secundario de la lista interna de procesos secundarios de un shell. El PPID del niño sigue siendo el del caparazón. El shell ha olvidado que alguna vez comenzó a ese niño, pero el núcleo recuerda.