Grupo de proceso huérfano y descripción de la sesión de terminal

  
 

Proceso huérfano: proceso cuyo proceso principal ha finalizado. El proceso de huérfano es heredado por el proceso de inicio <; Adopción ", el ID del proceso de inicio es 1, por lo que el proceso principal del proceso de huérfano adoptado se actualiza a 1.

Grupo de procesos huérfanos: el proceso principal de todos los procesos en un grupo de procesos es un proceso del grupo de procesos o un proceso en la sesión en la que se encuentra el grupo de procesos. La condición de que un grupo de proceso no sea un grupo de proceso huérfano es que hay un proceso en el grupo cuyo proceso principal está en otro grupo que pertenece a la misma sesión.

GNU explica por qué el concepto de un grupo de proceso huérfano, su terminal se convierte en libre y se puede establecer una nueva sesión en él.
(De hecho, otro usuario podría iniciar sesión en el terminal ... podría ser un problema si algún proceso de la sesión anterior aún intenta usar ese terminal. Para evitar problemas, los grupos de procesos que continúan ejecutándose incluso después de que el líder de la sesión haya finalizado se marcan como grupos de procesos huérfanos. Si un programa ignora esta señal o establece un controlador para ella, puede continuar ejecutándose como en el grupo de procesos huérfanos incluso después de su proceso de control. Termina, pero aún no puede acceder al terminal.

Cuando finaliza un proceso de control de terminal (es decir, el primer proceso de la sesión), se puede usar el terminal para establecer una nueva sesión. Esto puede crear un problema en el que cualquier proceso en la sesión anterior (una colección de uno o más grupos de procesos) puede acceder al terminal nuevamente. Para prevenir este tipo de problemas, existe un concepto de grupo de proceso huérfano. Cuando un proceso consta de un grupo de procesos huérfanos, posix.1 requiere que se envíe una señal SIGHUP (suspensión) al proceso en el grupo de procesos huérfanos. El procesamiento predeterminado para esta señal es finalizar el proceso, pero si ignora esta señal o Si se maneja por separado, entonces el proceso suspendido puede continuar ejecutándose.

El siguiente extracto de la red:

El problema del terminal involucra varios conceptos, es decir, grupos de procesos, sesiones y operaciones, que se describen por separado a continuación. Una sesión consiste en una serie de procesos que se organizan en grupos de procesos según los diferentes contenidos de ejecución. Todos los procesos en una sesión deben ser descendientes del proceso de líder de sesión, lo que garantiza que estos procesos sean el líder de la sesión. El proceso se abre directa o indirectamente. Solo de esta manera se puede garantizar que los procesos estén dentro de la línea de visión del proceso del líder de la sesión. Al mismo tiempo, el proceso del líder de la sesión ya no controla al grupo de procesos huérfanos. Tarea: solo hay una terminal, pero hay muchas cosas que hacer al mismo tiempo, o al menos hacerlo de una manera de compartir el tiempo. No puedes hacer una cosa antes de hacer otra. ¿Qué debo hacer? Después de todo, después de iniciar un proceso, el proceso monopolizará el terminal. Después de todo, el shell lo configurará como el proceso de grupo de proceso de primer plano. Esta es la función del trabajo, solo agregue un &símbolo después de un comando, por ejemplo, quiero ejecutar x, luego escriba: x &los resultados de la shell son: [1] 1234 donde 1234 es el proceso Pid, y 1 es el ID del trabajo, por lo que la x no ocupa el terminal, el shell puede iniciar otros procesos o trabajos, por ejemplo, iniciar el trabajo 2: [2] 4321 piense en el trabajo 1 que necesita para usar el terminal Ingrese alguna información, luego use: fg% 1 para poner el trabajo 1 en primer plano (actualmente solo hay un proceso en el trabajo 1), ¿cómo colocar el trabajo colocado en primer plano en segundo plano? Solo necesita usar la señal SIGSTOP para detener el proceso de usar el terminal en primer plano, y luego el proceso dejará de lado el terminal que ocupa el grupo de procesos: un trabajo es un grupo de procesos y un proceso separado puede monopolizar un grupo de procesos o unirse a otra sesión de la misma sesión. El grupo de procesos debe cumplir la condición de que todos los procesos en el mismo grupo de procesos deben ser descendientes de una sesión. El llamado grupo de procesos consiste en organizar el trabajo u organizar el mismo tipo de tareas. Terminal de control: el creador de una sesión tiene el derecho de solicitar un terminal de control, en el cual se puede aceptar una entrada estándar, se puede enviar un atajo de control que el shell entiende, se puede crear un trabajo y se puede usar la función de control de trabajo proporcionada por el proceso de encabezado de sesión. El terminal de control solo puede crearse mediante el proceso de encabezado de sesión, y el terminal de control es exclusivo. Mientras un proceso considere que un terminal es el terminal de control, otros procesos no pueden hacerlo independientemente de quién sea. Las últimas líneas en tty_open son las siguientes. Codifique if (! Noctty &¤t > signal- > leader &&! Current- > signal- > tty &&tty- > session == 0) {task_lock (current); current- > signal- > tty = tty; task_unlock (current); current- > signal- > tty_old_pgrp = 0; tty- > session = current- > signal- > session; //- > pgrp = process_group (current);} Se puede ver que otros procesos no están autorizados para solicitar terminales de control. ¿Para quién es usualmente usado este terminal de control? El líder de la sesión que no tuvo más éxito solicitó el terminal, porque incluso si es dudoso, los niños que le pertenecen son cuestionables. El terminal para la aplicación de la cabeza es para los niños. Los jefes usarán a estos niños. Se divide en varios grupos de procesos, y un grupo se designa como grupo de procesos en primer plano. Solo el proceso de este grupo de procesos en primer plano puede usar el terminal de control. Bash generalmente existe como líder de la sesión. Bash creará un grupo de proceso para un comando ejecutado. Cuando acepta un comando para ejecutarse, establece el proceso como el grupo de proceso en primer plano. Acepta la línea de comandos y agrega &El comando creará un trabajo y lo configurará como un grupo de proceso en segundo plano, luego quién es la recepción, bash usted mismo. El proceso en segundo plano no puede usar el terminal. Si usa ¶ ejecutar un proceso con una función como getchar, recibirá la señal SIGTTIN, pero puede usar el comando fg para poner ese proceso en primer plano. Proceso de control: Obviamente, el primer proceso de control es el proceso principal de una sesión. Además, incluso el líder de la sesión solo puede controlar otros procesos a través del terminal. El llamado control es enviar señales en lugar de memoria operativa, que también se realiza entre procesos. Una forma de comunicación. Así que el llamado proceso de control es el proceso de aplicación al terminal de control.
(El control de la operación es similar) Grupo de procesos huérfanos: hay procesos huérfanos y también hay conceptos de grupos de procesos huérfanos. ¿Por qué introducir el concepto y la introducción de este concepto requiere que el implementador del sistema operativo haga algo? Primero observe las dos premisas, primero, posix usa un concepto de sesión para describir el inicio de sesión de un usuario y la operación del usuario después del inicio de sesión, y luego usa el concepto del trabajo para describir el contenido de diferentes operaciones, y finalmente usa el concepto del proceso para describir diferentes Una operación específica en la operación; en segundo lugar, Unix inicialmente organizó todos los procesos en forma de árbol, lo que facilita el seguimiento de cada proceso y su gestión.
(Pensando, la sociedad política humana también es una estructura similar a un árbol: la monarquía , sistema bicameral, etc.). Con las dos premisas anteriores, entiendo que todo es para la administración. Todo es para la seguridad del usuario registrado. Es decir, el trabajo del usuario conectado no puede ser controlado por el siguiente usuario registrado, incluso si sus usuarios. El mismo nombre tampoco es aceptable, por lo que el llamado grupo de proceso huérfano es simplemente separarse del control de sesión que lo creó, el grupo de proceso que deja su delineador de sesión, cómo controlar el proceso en Unix, cómo probar si está en su propio delineador, es decir La estructura del árbol, siempre y cuando el proceso en el subárbol arraigado en sí mismo es el proceso en el delineador, el proceso está protegido y tiene derecho a operar, y el proceso en otras ramas es en principio intocable ( También quiero hablar sobre la creación de subprocesos remotos de ventanas, pero luego debo decir que es un mecanismo de token complejo, de lo contrario los fanáticos de las ventanas no están convencidos, así que no lo digan, el proceso de construcción de Unix con un tenedor, naturalmente, es un ". "Fork" formó una rama propia, por supuesto, en su propio delineador de ojos, generalmente una sesión comienza con un usuario de inicio de sesión. Después del segundo inicio de sesión, siempre que el usuario no cierre la sesión, todos los procesos que no sean daemon ejecutados en el shell del terminal son descendientes del shell, por lo que forman una sesión, todo en el delineador de ojos del shell, y una sesión termina en La muerte del líder de la sesión (nota: la terminación del grupo de proceso es independiente de la terminación del proceso del líder). Ahora considere el escenario después de que el shell salga del terminal. De acuerdo con las regulaciones, todos los procesos en el terminal se pasan a otros procesos. La mayoría de los casos son procesos de inicio, y luego otro usuario inicia sesión en el terminal o conoce el anterior. Otra persona que tiene una mala idea de iniciar sesión en la clave de usuario inicia sesión en el terminal. Por supuesto, se crea una nueva sesión para el shell que se inició. Dado que el usuario que inició sesión anteriormente se desconectó, el usuario que inició sesión ahora se debe al grupo de procesos del usuario anterior. Se convirtió en un grupo de proceso huérfano, por lo que ya no puede controlarlos. Los miembros del grupo de proceso huérfano continúan ejecutándose de forma segura o son eliminados por la señal SIGHUP enviada por el shell cuando salen. La regla POSIX es la disciplina de hierro, y la implementación de Unix o Linux, ya sea el núcleo o el shell, es un enfoque basado en la disciplina. La disciplina de hierro requiere que el control del trabajo se base en la sesión, es decir, no puede operar en otras sesiones. El grupo de proceso, por lo que los comandos como fg y bg no pueden operar el proceso huérfano, entonces ¿qué sucede si el grupo de proceso en segundo plano es detenido por la señal SIGSTOP porque el terminal de lectura /escritura se detiene, y luego se convierte en un miembro del grupo de proceso huérfano? El comando de control de trabajo de otras sesiones no puede operarlo. Incluso si ps -xj lo encuentra y luego envía SIGCONT manualmente, entonces no puede usar el terminal. Este es otro requisito de disciplina de POSIX. Solo la sesión asociada con el terminal es única. El proceso en el grupo de procesos en primer plano puede usar el terminal, por lo que mientras exista un shell, la mejor manera es eliminar todos los procesos en su sesión, por lo que la intención original de SIGHUP es esta, pero puede ignorar completamente esta señal o usted mismo. Define la respuesta a esta señal. La limitación básica de POSIX es que el ID de sesión no se puede configurar porque es la unidad básica protegida, pero se puede configurar el ID del grupo de procesos. Después de todo, solo distingue los trabajos imposibles, y el PID del último proceso no se puede configurar. Debido a que es la propiedad interna del proceso, forma el atributo clave de la estructura de la estructura de árbol. POSIX define el grupo de procesos huérfanos: el proceso padre de un proceso sin un proceso pertenece a la misma sesión pero a diferentes grupos de procesos. Daemon: El daemon necesita hacer algunas cosas: 1. fork un proceso secundario: dado que bash configurará el programa como un proceso de grupo de proceso de primer plano entre la bifurcación y el exec al ejecutar el programa, la bifurcación no se configura después de esto. , entonces el proceso hijo se convertirá en un proceso en segundo plano, y no hay un grupo de proceso exclusivo, el proceso hijo pertenece al grupo de proceso del proceso padre. 2. Llame a setsid para iniciar una nueva sesión e iniciar un nuevo grupo de proceso, que se convierte en el jefe de una nueva sesión. 3. Bifurque un proceso hijo otra vez, esto puede evitar que el proceso hijo de la primera bifurcación vuelva a aplicarse para controlar el terminal, después de todo, es el líder de la sesión. 4. Cierre todos los descriptores de archivo, especialmente cierre los descriptores relacionados con el terminal 0, 1, 2, etc., porque no hay terminal. 5 &​​hellip;.

Copyright © Conocimiento de Windows All Rights Reserved