繁体   English   中英

C on LINUX - 多个子进程执行异常次数

[英]C on LINUX - Multiple child proces exec unusual number of times

我正在尝试创建n = 10个子进程并使其执行代码安静。然而,它创建了14个与n无关的子进程。 这是为什么?

这是示例代码:

#include <stdlib.h>
#include <stdio.h>

int main()
{
    printf("It worked! ");
    return 0;
}

这是主要计划:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h> 
#include <unistd.h>
#include <sys/wait.h>

int main (int argc, char *argv[])
{
     int n = 10;
     pid_t pid;

     int status = 0;
     int fd2[2];
     int i = 0;

     while (i < n)
     {
         /*create the pipe */
         if (pipe(fd2) == -1)
         {
             fprintf(stderr, "Problem at pipe: %s\n", strerror(errno));
             exit(1);
         }

         /*create fork*/
         pid = fork();

         if (pid == -1)
         {
             fprintf(stderr, "Problem at fork: %s\n", strerror(errno));
             exit(1);
         }
         else if (pid == 0)  /*in child*/
         {
             close(fd2[0]); 
             close(1);
             dup2(fd2[1], 1);
             close(fd2[1]);

             execl("sample.bin", "sample.bin", NULL);

             fprintf(stderr, "Problem at exec: %s", strerror(errno));
             exit(1);
         }

         /* in parent */
         close(fd2[1]);
         char line[255];

         if (n = read(fd2[0], line, 254))
         {
             printf("%d The message is: %s\n", i, line);
         }

         close(fd2[0]);

         wait(&status);
         i++;        
     }

     return 0;
 }

我纠正了代码,现在输出是我所期望的。 当然另一个问题是我在阅读时使用了相同的变量n。

我修改了这个:

if (n = read(fd2[0], line, 254))
{
   printf("%d The message is: %s\n", i, line);
}

对此:

int m;
while((m = read(fd2[0], line, 254) > 0)
{
   printf("%d The message is: %s\n", i, line);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM