El concepto básico (proceso, grupo de procesos, la relación de sesión) proceso de kernel de Linux

Proceso es un concepto básico del sistema operativo. Cada proceso tiene su propia y única identidad: ID de proceso, también tiene su propio ciclo de vida. Un ciclo de vida típico del proceso mostrado en la Figura 4-1.

 
 
Proceso tiene un proceso padre, el proceso padre también tiene un proceso padre, que formó un proceso init es la raíz del árbol genealógico. Además, hay otro proceso de jerarquía: proceso, grupo de procesos y la sesión.
grupo de proceso y el proceso de formación de una conversación entre dos niveles: grupo de proceso es un conjunto de procesos relacionados de una sesión de grupo es una colección de grupo de proceso relacionada.
En este sentido, un proceso tendrá el siguiente ID:
· PID: un proceso de identificación único. Para el proceso de multiproceso, todas las discusiones llama devuelve la función GETPID el mismo valor.
· Pgid: proceso de grupo ID. Cada proceso tendrá un ID de grupo, proceso de grupo de proceso que representa el proceso pertenece. Por defecto, un proceso de nueva creación heredará ID de grupo de los padres.
· SID: ID de sesión. Cada proceso tiene también un identificador de sesión. Por defecto, un proceso recién creado hereda el ID de proceso principal de la sesión.
Usted puede llamar al siguiente comando para ver la jerarquía de todos los procesos:
  1. ps -ejH
  2. ps axjf
Proceso, puede llamar a la siguiente función para obtener el ID del grupo de procesos con el ID de sesión.
  1. pid_t getpgrp(void);
  2. pid_t getsid(pid_t pid);
Como se mencionó anteriormente, el nuevo proceso hereda del proceso predeterminado ID de grupo y el ID de sesión de los padres, si todo defecto, entonces trazadas visto que todos los procesos deben ser un ID de grupo de proceso común y el ID de sesión. Pero llamar axjf ps puede ver que no es el caso, una gran cantidad de diferentes sesiones existe en el sistema, en cada sesión hay diferentes grupo de procesos.
¿Por qué es esto así?
Al igual que el negocio de la familia, desde el principio, todos los miembros de la familia son rígidos, conformistas, por defecto, sólo tendrá una empresa, un departamento. Pero también los hijos de algunos "rebelde" dispuesto a explorar y expandir la empresa familiar, está dispuesto a establecer un nuevo departamento. El nuevo departamento es procesar el grupo recién creado. Si tiene hijos, "desviado", e incluso no desea permanecer en la empresa familiar, que se distingue del mundo, para crear una empresa separada, la nueva empresa que grupo de conversación es de nueva creación. Por lo tanto, el sistema debe ser cambiado y establece la interfaz de función de ID de grupo de proceso y el ID de sesión, de lo contrario, habrá sólo una sesión en el sistema, un grupo de procesos.
grupo de procesos y la sesión es apoyar los conceptos de control de trabajos de concha introducidas.
Cuando un nuevo usuario inicia sesión en Linux, el proceso de inicio de sesión crea una sesión para el usuario. shell de registro del usuario es la primera sesión del curso. La primera sesión procesará ID que toda la sesión ID. Una sesión es una colección de uno o más procesos de grupo abarca todas las actividades del usuario conectado.
En el shell de entrada, el usuario puede utilizar la tubería para permitir que varios procesos entre sí con la realización de una tarea, este grupo pertenecen al mismo proceso de un grupo de procesos.
Cuando el usuario a través de la herramienta de cliente SSH (masilla, Xshell, etc.), incluso cuando el Linux, inicie sesión en el escenario anterior es similar.
4.2.1 Grupo de Procesos
Modificar grupo de proceso ID de la interfaz de la siguiente
  1. int setpgid(pid_t pid, pid_t pgid);
La implicación de esta función es encontrar el identificador de proceso para el proceso pid modificará su ID de grupo es pgid, si pid es 0, significa que desea modificar ID de grupo de procesos del proceso de llamada. Esta interfaz se utiliza generalmente para crear un nuevo grupo de proceso.
En consonancia con el significado de las tres interfaces siguientes, es la creación de un nuevo grupo de proceso, y el proceso especificado será el primer proceso de grupo de proceso. Si el valor del parámetro PID y pgid no coinciden, entonces la función será setpgid un proceso de migración proceso desde el grupo original pertenece a pgid grupo de proceso correspondiente.
  1. setpgid(0,0)
  2. setpgid(getpid(),0)
  3. setpgid(getpid(),getpid())
función setpgid tiene una serie de limitaciones:
· Parámetro Pid debe especificarse como un proceso setpgid llamada de función o sub-proceso y no puede modificar ID de grupo de proceso no está relacionada con el proceso, si se infringe esta regla, y luego volver -1, y errno conjunto para ESRCH.
· Pid parámetro puede especificar un proceso hijo del proceso invocador, pero si la función exec proceso hijo ha sido ejecutado, no se puede cambiar el identificador de grupo de procesos del proceso hijo. Si se viola esta regla, a continuación, devuelve -1 y errno conjunto de EACCESS.
• El grupo entre procesos se mueve, el proceso llamando, especifica el grupo de procesos pid del proceso y de destino debe estar dentro de la misma sesión. Esto se entiende mejor, no unirse a la compañía (sesión), no se puede unir el departamento (Grupo de Procesos) filial de la empresa, o es el departamento va a ritmo rebelde. Si se viola esta regla, a continuación, devuelve -1 y errno el valor EPERM.
· Pid proceso especificado, la sesión no es el primer proceso. Si se viola esta regla, a continuación, devuelve -1 y errno el valor EPERM.
 
Con crear un grupo de procesos de interfaz, grupo de proceso no tiene que heredar el ID de grupo de nueva creación del proceso padre. El escenario más común es crear grupos de proceso en el intérprete de comandos tubería de ejecución, el código es el siguiente: CMD1  CMD2  Cmd3
Aquí con un comando simple para ilustrar la relación entre su proceso que se muestra en la Figura 4-2.
ps ax|grep nfsd 
 
 
 
ps procesos y subprocesos golpean procesos grep se crean, tanto por gasoducto para completar cooperativa de una obra, que pertenecen al mismo grupo de proceso, cuyo proceso ps es el líder del grupo de procesos.
El grupo de procesos concepto es fácil de entender la relación entre la gente puede hacer una analogía. Colegas que trabajan juntos, naturalmente más íntimo que transeúntes irrelevante. Las personas trabajan juntas en el proceso de la cáscara pertenecen al mismo grupo de proceso, al igual que trabajar juntos como parte de un mismo departamento.
Introduce el concepto de proceso de grupo, se puede administrar más fácilmente el proceso de este grupo. Por ejemplo, renunció a su trabajo, no todos necesidad de enviar una señal a cada proceso, puede enviar una señal directa al grupo de procesos, todos los procesos del grupo de procesos para recibir la señal.
        Anteriormente se ha mencionado que, una vez que el proceso hijo exec se ejecuta, el proceso padre no puede llamar a la función setpgid para establecer el ID de grupo proceso hijo, y esta regla afectará el control operacional de la cáscara. Por razones de seguridad, por lo general el proceso padre después de llamar tenedor para crear un proceso hijo, llamados conjuntos de funciones setpgid el ID de grupo del proceso del hijo, mientras que el proceso hijo debe llamar a la función setpgid para establecer su propio ID de grupo de procesos. Una vez que estas dos llamadas son de pago, pero al hacerlo puede garantizar tanto el proceso padre antes de la ejecución, o el proceso hijo antes de la ejecución, el niño debe haber entrado en el grupo de procesos especificado. Porque después del tenedor, el orden de ejecución de padre e hijo es incierta, por lo que si no lo hace, hará que dentro de una cierta ventana de tiempo, el proceso hijo no puede determinar si para entrar en el grupo de proceso correspondiente.
    El usuario puede ejecutar simultáneamente una pluralidad de comandos en la cáscara. Para un comando (como la compilación de un gran proyecto) que consume mucho tiempo, el usuario no tiene que esperar a que el comando para ejecutar tonta terminado antes de ejecutar el siguiente comando. Cuando los usuarios ejecutar comandos, se puede añadir el símbolo "&" al final del comando, dijo que ordenaría a un segundo plano. De esta manera el grupo de procesos comando correspondiente es el grupo de procesos de fondo. En cualquier momento, puede haber grupo de procesos de fondo simultánea múltiple, pero no importa a qué hora puede tener solamente un grupo de procesos en primer plano. Sólo el proceso se puede leer en el terminal de entrada de control en el grupo de procesos en primer plano. Cuando el terminal de usuario genera un carácter en el terminal de señal de entrada (por ejemplo ctrl c, ctrl + z, ctr + \ +, etc.), una señal correspondiente a un grupo de proceso en primer plano solamente.
La cáscara concepto puede contener múltiples grupos de procesos, ya sea el grupo de procesos en primer plano o de fondo grupo de procesos, que son más o menos hay un cierto vínculo, con el fin de controlar mejor el grupo de procesos (o llamada un trabajo), los introduce sistema de la sesión . Lo que significa que la sesión incluirá una gran cantidad de trabajo en un terminal, seleccionar uno como un terminal de recepción para recibir señales de entrada directa y, en los otros puestos de trabajo se ejecutan en segundo plano.
 
conversación
Una sesión es una colección de uno o más grupo de proceso, el sistema de inicio de sesión de usuario, por ejemplo, no puede ser el caso, como se muestra en la Figura 4-3.
 sistema setsid proporciona funciones para crear una sesión, la interfaz se define como sigue:
  1. #include <unistd.h>
  2. pid_t setsid(void);
Si el proceso que llama no es la función del líder del grupo de procesos, a continuación, llamar a esta función ocurrirá lo siguiente:
1) Crear una nueva sesión, el identificador de sesión igual a la ID del proceso, el proceso del proceso de llamada a convertirse en la primera sesión.
2) crear un grupo de proceso, ID de grupo de proceso igual a la ID de proceso, el proceso de llamada para convertirse en jefe del grupo de proceso.
3) El proceso no tiene terminal de control, si llama antes de setsid, el proceso tiene un terminal de control, este enlace se romperá.
proceso de llamada a la función setsid no puede ser un líder de grupo de procesos, o la llamada fallará, devuelven -1, y errno el valor EPERM.
Esta restricción es razonable. Si se permite que el proceso de migrar a la nueva cabeza de la sesión, mientras que otros miembros del grupo se encuentran todavía en el proceso de la sesión anterior, entonces el proceso será el mismo grupo de procesos que pertenece a la situación surgen entre las diferentes sesiones, que destruyeron estricta jerarquía de grupos de procesos y sesiones.
 
 

Supongo que te gusta

Origin www.cnblogs.com/aspirs/p/12503123.html
Recomendado
Clasificación