C的fork()示例输出

时间:2017-10-13 20:08:39

标签: c

所以我无法弄清楚这个程序的输出,因为我很困惑什么决定孩子被执行的时间和父母的时间。

int i, n =6;
for(int i =0; i<4; i++)
    fork();
n++;
printf("n is %d\n", n);

1 个答案:

答案 0 :(得分:0)

这是胡说八道:

int i, n =6;
for(int i =0; i<4; i++)
    fork();
n++;
printf("n is %d\n", n);

推荐:

以下代码:

  1. 干净地编译
  2. 检查错误
  3. 将父处理与子处理分开
  4. 每个流程都会通知用户当前状态是什么
  5. 正确等待子进程退出
  6. 不使用'魔术'数字
  7. 正确分隔代码块以提高可读性
  8. 遵循公理:每行只有一个语句,并且(最多)每个语句一个变量声明。
  9. 将变量保持在本地使用位置
  10. 记录每个头文件包含的原因
  11. 现在代码:

    #include <stdio.h>    // printf(), perror()
    #include <stdlib.h>   // exit(), EXIT_SUCCESS, EXIT_FAILURE
    #include <unistd.h>   // fork(), pid_t
    #include <sys/types.h>
    #include <sys/wait.h> // waitpid()
    
    
    #define MAX_CHILDS 4
    
    int main( void )
    {
    
        pid_t pid[ MAX_CHILDS ] = {0};
    
        for(int i =0; i<MAX_CHILDS; i++)
        {
            pid[i] = fork();
    
            switch( pid[i] )
            {
                case 0: // child
                    printf( "I am child: %d\n", i );
                    exit( EXIT_SUCCESS );
                break;
    
                case -1:  // error
                    perror( "fork failed" );
                    // exit( EXIT_FAILURE );
                break;
    
                default:  // parent
                    printf( "I am the parent\n" );
                break;
            } // end switch()
        }
    
    
        // wait for each child to exit before parent exits
        // so no child becomes a zombie process
        for( int i=0; i<MAX_CHILDS; i++ )
        {
            int status;
    
            // only wait on a child process if it was actually created
            if( pid[i] != -1 )
            {
                waitpid( pid[i], &status, 0);
            }
        }
    } // end function: main