¿Cuáles son las ventajas de fork en sistemas unix?

¿Cuál es la diferencia de un simple inicio **** & gt; / dev / null & amp ;?

Respuestas
joann bubonic paulek
Nada. Este es simplemente un concepto obsoleto que persiste por compatibilidad. Single Unix Specification dice lo siguiente:
Hay dos razones por las que los programadores de POSIX llaman a fork (). Era un programa que estaba en proceso de crear un nuevo proceso; el programa se está ejecutando En este último caso, fue seguido por las funciones exec.
Es decir, literalmente, hay dos usos para la bifurcación: crear un nuevo proceso a partir de un nuevo binario y crear un nuevo "hilo" en el proceso actual. En ambos casos, tiene fallas derivadas del principio de la horquilla:
1) Al crear un proceso, primero se copia el espacio de direcciones (no la memoria, sino el espacio de direcciones; cada proceso tiene su propia manera de todos modos), descriptores y otros recursos para liberarlos de inmediato (este problema se resuelve parcialmente con el vfork)
2) Al crear una transmisión, el espacio de direcciones se copia de nuevo en lugar de reproducirse en el mismo.

Lo único útil que me viene a la mente es la creación de entornos limitados de Chrome / IE7. Crear un nuevo proceso para copiar lo antiguo será un par de millones (unos pocos milisegundos en los procesadores modernos) es más barato: para aquellos que son importantes para crear cajas de arena en grandes cantidades (y por alguna razón, el conjunto de preformas de tales cajas de arena no es adecuado). Esto puede ser significativo. br />
Existe otro problema además de la degradación relativamente pequeña del rendimiento en los dos escenarios más utilizados. Así es como el mismo SUS describe el problema:
Hay dos alternativas. Copiar a todos los nuevos hilos. Fue suspendido por el nuevo proceso. Te pide que bifurques (). Esto crea un estado del arte de los recursos. No es hasta ahora que el proceso ha tenido lugar.

En el diseño de software moderno existe un concepto tan importante como link. Por lo tanto, el proceso tradicional de Unix tiene baja conectividad. Es simultáneamente un contenedor de recursos (para simplificar, podemos decir que es una abstracción de la memoria) y una unidad de ejecución (abstracción del procesador).
Los hilos Posix están diseñados para resolver este problema, pero son incompatibles con la horquilla. Por lo tanto, es mejor utilizar el enfoque descrito en el mismo SUS:
Es una función del programa multihilo. Es una función para no definirte.
Use FORK ONLY para ejecutar un nuevo programa, use pthread_create para todo lo demás.
duyenngoc auth
Puedo estar equivocado, pero en mi opinión, & quot; **** & gt; / dev / null && quot; recibirá un SIGHUP si el terminal está roto
es absolutamente cierto! - stephanie wilga
solo no HUP sino Bonal TERM (aquí puedo estar equivocado) - amaya
kathy doyle
Estado de transferencia, como.
En el sentido de que cuando se genera una bifurcación, se genera una copia del proceso, ya inicializada, por ejemplo. En el caso de un "inicio simple **** & gt; / dev / null &? "tendrá que inicializarse cada vez más (por no hablar de la transferencia de datos para ello).

Si solo necesita comenzar su propio proceso desde cero, no hay ventajas, además de que fork es muy lento. - eva truesdale
¿Es posible obtener más información sobre la inicialización? Estoy interesado en la diferencia en los recursos del sistema, ¿qué método funcionará más rápido y consumirá menos memoria?
Quiero entender el futuro, no está claro por qué la pregunta merecía un signo negativo. Este no es el tema de Habr? - sharad sundararajan
para el que tengo un menos, tampoco entiendo muy bien =)
A continuación se describe la ideología, estoy más en la parte práctica:
Si desea ejecutar algún comando por separado del proceso principal y continuar trabajando, el "inicio fácil" será más rápido y no consumirá más memoria al inicio del comando.
Si desea recoger una copia del proceso principal, entonces la bifurcación será más conveniente porque todo se inicializará en los procesos secundarios. Aquí, la inicialización no está en la comprensión del sistema operativo, sino desde el punto de vista del proceso en sí (un ejemplo abstracto: lectura de configuraciones, creación de un núcleo, definición de qué y por qué estamos haciendo, todo esto se hará con un fork en procesos secundarios). - majella
camron
idea ideológicamente clara de un proceso dividido