Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

298
Vistas
El proceso hijo comienza después del proceso padre

Tengo un código simple para probar la función fork() .

 #include<stdio.h> #include<unistd.h> #define MAX_COUNT 10 void main(void) { pid_t pid; int i; fork(); pid = getpid(); for(i = 1; i <= MAX_COUNT; i++) { printf("PID = %d, i = %d\n", pid, i); } }

No funcionó como esperaba.

Mi expectativa es: el resultado del padre y el resultado del niño aparecen alternativamente. ¿Alguien puede explicarme esto y enseñarme cómo solucionarlo? ¡Gracias!

 PID = 3663, i = 1 PID = 3663, i = 2 PID = 3663, i = 3 PID = 3663, i = 4 PID = 3663, i = 5 PID = 3663, i = 6 PID = 3663, i = 7 PID = 3663, i = 8 PID = 3663, i = 9 PID = 3663, i = 10 PID = 3664, i = 1 PID = 3664, i = 2 PID = 3664, i = 3 PID = 3664, i = 4 PID = 3664, i = 5 PID = 3664, i = 6 PID = 3664, i = 7 PID = 3664, i = 8 PID = 3664, i = 9 PID = 3664, i = 10
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

La explicación es sencilla. La programación de los procesos depende del núcleo. Si se trata de un procesador de un solo núcleo, en esta ejecución decidió suspender la ejecución secundaria y permitir que el proceso principal se ejecute primero. El padre corrió por algunos bucles antes de ser suspendido a favor del niño, y así sucesivamente.
En un sistema multiprocesador, ambos procesos pueden ejecutarse en tándem, pero el dispositivo de la consola alternará la salida según el tiempo de las interrupciones.

No hay garantía de que una ejecución diferente resulte en el mismo resultado. Tampoco hay garantía de que una versión diferente del kernel no haga otra cosa.

Si desea que los procesos alternen entre bucles, ahora es el momento de aprender la comunicación entre procesos .

over 4 years ago · Santiago Trujillo Denunciar

0

El proceso principal no está cediendo el control inmediatamente, y el ciclo for se ejecuta tan rápido que termina antes de que se programe el segundo proceso. Cuando ejecuto su código, obtengo impresiones no secuenciales, pero el comportamiento depende del sistema.

A veces ayuda lanzar comandos sleep() cuando juegas con fork() . Prueba este código...

 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define MAX_COUNT 10 int main(void) { pid_t pid; int i; fork(); pid = getpid(); srand(pid); // Make sure each process has a different seed for(i = 1; i <= MAX_COUNT; i++) { printf("PID = %d, i = %d\n", pid, i); // Sleep 1-3 seconds. unsigned int sleep_seconds = rand() % 3 + 1; sleep(sleep_seconds); } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda