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

156
Views
¿Se bloquearán los procesos si el número de procesos secundarios es mayor que los procesadores mientras se usa la canalización?

Mi programa deja de ejecutarse mientras la cantidad de procesos secundarios es grande. No sé cuál podría ser el problema, pero supongo que los procesos secundarios están bloqueados de alguna manera mientras se ejecutan.

Aquí está el flujo de trabajo principal del programa:

 void function(int process_num){ int i; // initial variables for fork() int status = 0; pid_t child_pid[process_num], wpid; int *fds = malloc(sizeof(int) * process_num * 2); // initial pipes for(i=0; i<process_num; i++){ if(pipe(fds + i*2) <0) exit(0); } // start child processes to write for(i=0; i<process_num; i++){ child_pid[i] =fork(); if(child_pid[i] == 0){ close(fds[i*2]); // do something ... // write(fds[i*2+1], something); close(fds[i*2+1]); exit(0); }else if(child_pid[i] == -1){ printf("fork error\n"); exit(0); } } // parent waits child processes and reads for(i=0; i<process_num; i++){ pid_t cpid = waitpid(child_pid[i], &status, 0); if (WIFEXITED(status)){ close(fds[i*2+1]); // do something ... // read(fds[i*2], something); close(fds[i*2]); } } free(fds); while((wpid = wait(&status)) > 0); }

Verifiqué el estado de los procesos a través de htop, había varios (por ejemplo, 8 mientras que process_num era 110) procesos secundarios que quedaron con el estado S .

y ahora viene mi pregunta: si la cantidad de procesos secundarios es mayor que la cantidad de procesadores, ¿se bloquearán los procesos secundarios al usar la canalización para los procesos secundarios y el proceso actual para comunicarse (el proceso principal espera hasta que se ejecuten todos los procesos secundarios)? ¡Muchas gracias!

EDITAR: imprimí la identificación de fds cuando usé read() y write() , y descubrí que la lectura comenzó en 4 y la escritura en 5, no tengo idea de por qué fue así, ¿alguien lo sabe?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

El número de procesadores no tiene ningún impacto aquí. El sistema operativo está vivo, capaz de ejecutar cualquier proceso que tenga algo que ver. Este es un problema de software puro, todos los procesos están en estado de suspensión (S) esperando algún evento que nunca sucede.

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!