Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

301
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!