La función fork () es una función fork. Un proceso existente puede llamar a la función fork () para crear un nuevo proceso. ¿Cómo se llama la función fork () en Linux? ¿O cómo implementar la función fork () bajo Linux? Ven con Xiaobian.
1. La llamada al sistema tradicional de tenedor () directamente copiado en el proceso de nueva creación .Linux todos los recursos del tenedor () copia (copy-on-write) logra al utilizar la página de escritura. Escribir en escritura es una técnica que puede diferir o incluso eliminar la copia de datos. El kernel no copia todo el espacio de direcciones del proceso en este momento, pero permite que los procesos padre e hijo compartan la misma copia.
Solo cuando necesite escribir, los datos se copiarán, de modo que cada proceso tenga su propia copia, es decir, la copia del recurso solo se realiza cuando se necesita escribir. Antes de eso, Solo compártela como solo lectura. Esta técnica hace que la copia de la página en el espacio de direcciones se aplace hasta que se produzca la escritura real. En el caso de que la página no esté escrita (por ejemplo, exec () se llama inmediatamente después de fork ()), no es necesario copiarlos.
2.linux implementa fork () llamando a clone () en el sistema. Entonces do_fork () es llamado por clone ().
La implementación de la función fork () en linux:
Linux implementa fork () a través de la llamada al sistema clone (). Esta llamada especifica los recursos que el proceso primario y secundario necesita compartir, a través de una serie de indicadores de parámetros. Las funciones de las bibliotecas fork (), vfork () y __clone () llaman a clone () de acuerdo con sus respectivas marcas de parámetros. Luego llame a do_fork () desde clone ().
do_frok hace la mayor parte del trabajo en la creación, se define en el archivo ker /frok.c. Esta función llama a la función de copy_process () y luego hace que el proceso comience a ejecutarse. El trabajo realizado por la función copy_process () es muy interesante:
1. Llame a dup_task_struct () para crear una pila de kernel, estructura thread_info y task_struct para el nuevo proceso. Estos valores son los mismos que el proceso actual. En este punto, los descriptores del proceso hijo y el proceso padre son idénticos.
2. Después de verificar el proceso secundario recién creado, el número de procesos que posee el usuario actual no excede el límite de los recursos asignados a él.
3. Ahora, el proceso hijo se establece para distinguirse del proceso principal. Muchos miembros del descriptor de proceso se borran o configuran en sus valores iniciales. Los valores de los miembros del descriptor de proceso no se heredan, sino principalmente información estadística. La mayoría de los datos en el descriptor del proceso son compartidos.
4. A continuación, el estado del proceso hijo se establece en TASK_UNINTERRUPTIBLE para garantizar que no se pondrá en funcionamiento.
5.copy_process () llama a copy_flags () para actualizar los miembros de flags del task_struct. El indicador de PF_SUPERPRIV que indica si el proceso tiene privilegios de superusuario se borra a 0. Indica que el indicador no ha establecido el indicador PF_FORKNOEXEC de la función exec ().
6. Llame a get_pid () para obtener un PID válido para el nuevo proceso.
7. De acuerdo con los parámetros que se han pasado a clone (), copy_process () copia o comparte archivos abiertos, información del sistema de archivos, controladores de señales, espacios de direcciones de procesos y espacios de nombres. En la segunda mitad del día, estos recursos son compartidos por todos los subprocesos de un proceso determinado, de lo contrario, estos recursos son diferentes para cada proceso y, por lo tanto, se copian aquí.
8. Permita que los procesos padre e hijo dividan los segmentos de tiempo restantes.
9. Finalmente, copy_process () realiza el trabajo de acabado y devuelve un puntero al proceso hijo.
Vuelva a la función do_fork (). Si la función copy_process () regresa con éxito, el proceso secundario recién creado se reactiva y se pone en funcionamiento. El kernel selecciona intencionalmente el proceso hijo para ejecutarse primero. Debido a que la mitad de los procesos secundarios llamará inmediatamente a la función exec (), lo que evita la sobrecarga adicional de la copia en escritura. Si el proceso principal se ejecuta primero, puede comenzar a escribir en el espacio de direcciones.
Lo anterior es la introducción del método de llamar a la función fork () en Linux. Además de presentar el método de llamar a la función fork () en Linux, este artículo también presenta la implementación de la función fork () en detalle. Espero que tenga Ayudó
Hay un error cuando svn se actualiza automáticamente en el sistema Linux. Indica que el enlace de post-commit falló (código de salida 255) sin
Algunos usuarios de Linux han experimentado errores de Acceso denegado al iniciar sesión en SSH. ¿Có
Los usuarios de Linux ciertamente no son ajenos a los servidores CentOS, pero ¿cómo
tcpdump es un comando de captura de paquetes en los comandos de Linux. Puede interceptar y analizar
¿Cómo recuperarse después de que el archivo fstab se pierde en Linux?
¿Cómo crear registros de Linux?
Cómo usar el comando sed en Linux
Linux cuando el programa se le pide un error al cargar compartidos?
Permisos de archivos del sistema Linux y introducción al modo de acceso
Método de Linux para cambiar la capacidad del disco VirtualBox
Linux usando iptables para el método de copia de seguridad /restauración remota
Resumen del uso de lftp en el sistema Linux
Cómo modificar el ícono de la aplicación en Ubuntu Gnome
El arranque de WinXP en la barra de desplazamiento reiniciará automáticamente la solución
La configuración del firewall xp en cmd se puede implementar en
Control flexible del nivel de micrófono del sistema Win7
10 principales eventos en el mercado de TI en 2009: windows7, computación en la nube en la lista
Win8 no puede usar la solución de caja LOL
Win8 Encyclopedia 46: Configuración personalizada de sonido del sistema