2011-05-19 18 views
14

La función Can Fork() se puede utilizar para replicar un proceso multiproceso. Y si es así, ¿todos los hilos serán exactamente iguales y si no, por qué no? Si la replicación no se puede hacer a través de un tenedor, ¿hay alguna otra función que pueda hacerlo por mí?Horquilla multiproceso

+0

¿Has visto [esta pregunta] (http://stackoverflow.com/questions/1235516/fork-in-multi-threaded-program)? ¿O [este] (http://stackoverflow.com/questions/1073954/fork-and-existing-threads)? Básicamente, solo el '' fork() 'hilo de hilo sobrevive en el proceso secundario. ¿Qué estás intentando lograr? – Zecc

+0

En realidad, estaba tratando de crear un proceso replicado para una ejecución confiable, donde el proceso replicado verificara las salidas del proceso primario ejecutando el mismo código. – MetallicPriest

Respuesta

13

No, el niño solo tendrá un hilo. Bifurcar un proceso enhebrado no es trivial. (Consulte este artículo Threads and fork(): think twice before mixing them para obtener un buen resumen).

No conozco ninguna forma de clonar un proceso y todos sus hilos, no creo que eso sea posible en Linux.

+2

+1, publicación de blog muy informativa. – DarkDust

-1

Un tenedor crea un nuevo proceso con su propio hilo (s), copia el descriptor de archivo y la memoria virtual.

Un proceso secundario NO comparte la misma memoria con su padre. Entonces esto no es lo mismo