C 进程运行不正确

C 进程运行不正确,c,process,fork,pid,C,Process,Fork,Pid,我的任务是编写一个创建三个进程的C程序(“procs.C”):一个创建两个子进程的父进程 第一个孩子应该做以下事情: 显示“第一个孩子出生了,我的pid是…” 显示十次消息“First child Executions iteration X”,其中X是迭代次数 显示“第一个孩子静静地死去。” 第二个孩子应该做以下事情: 显示“第二个孩子出生了,我的pid是…” 显示十次消息“Second child Executions iteration X”,其中X是迭代次数 显示“第二个孩子悄然死

我的任务是编写一个创建三个进程的C程序(“procs.C”):一个创建两个子进程的父进程

第一个孩子应该做以下事情:

  • 显示“第一个孩子出生了,我的pid是…”

  • 显示十次消息“First child Executions iteration X”,其中X是迭代次数

  • 显示“第一个孩子静静地死去。”

第二个孩子应该做以下事情:

  • 显示“第二个孩子出生了,我的pid是…”

  • 显示十次消息“Second child Executions iteration X”,其中X是迭代次数

  • 显示“第二个孩子悄然死去”

父进程应执行以下操作:

  • 显示“父进程已出生,我的pid为…”

  • 创建第一个子对象

  • 创建第二个子对象

  • 显示“父进程悄然死亡”

使用gcc编译程序,并将可执行文件命名为“procs”。执行程序几次,注意两个子项的输出是如何交错的。属于该项目这一部分的所有文件都应放在您的nova主目录中,并在H3任务下发布在Webtycho中

该程序的一个可能输出为:

nova> ./procs

Parent process is born, my pid is 7847
First child is born, my pid is 7848    
First child executes iteration: 1
First child executes iteration: 2
First child executes iteration: 3
First child executes iteration: 4
First child executes iteration: 5
Second child is born, my pid is 7849
Second child executes iteration 1
Second child executes iteration 2
Second child executes iteration 3
First child executes iteration: 6
Second child executes iteration 4
Second child executes iteration 5
Second child executes iteration 6
First child executes iteration: 7
Second child executes iteration 7
Second child executes iteration 8
Second child executes iteration 9
Second child executes iteration 10
Second child dies quietly.
First child executes iteration: 8
First child executes iteration: 9
First child executes iteration: 10
First child dies quietly.    
Parent process dies quietly.
但是,我当前的输出是:

nova2> ./procs
Parent process is born, my pid is: 1977
First child is born, my pid is: 1978
First child executes iteration: 1
First child executes iteration: 2
First child executes iteration: 3
First child executes iteration: 4
First child executes iteration: 5
First child executes iteration: 6
First child executes iteration: 7
First child executes iteration: 8
First child executes iteration: 9
First child dies quietly
Second child is born, my pid is: 1979
Second child executes iteration: 1
Second child executes iteration: 2
Second child executes iteration: 3
Second child executes iteration: 4
Second child executes iteration: 5
Second child executes iteration: 6
Second child executes iteration: 7
Second child executes iteration: 8
Second child executes iteration: 9
Second child dies quietly
Bus Error (core dumped)
我现在的代码是:

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

int main() {
    int pid, i;

    printf("Parent process is born, my pid is: %d\n", getpid());

    pid = fork();
    switch(pid) {
    case -1:
        /* an error occurred */
        printf("Fork error");
        break;

    case 0:
        /* this code is executed by child process #1*/
        printf("First child is born, my pid is: %d\n", getpid());

        for(i=1; i<10; i++)
            printf("First child executes iteration: %d\n", i);

        printf("First child dies quietly\n");

        exit(0);

    default: /* this code is executed by the parent process */

        if(fork()==0) {
            printf("Second child is born, my pid is: %d\n", getpid());

            for(i=1; i<10; i++)
                printf("Second child executes iteration: %d\n", i);

            printf("Second child dies quietly\n");
            exit(0);
        }

        wait();

        printf("Parent process dies quietly.\n");

    }
}
#包括
#包括
#包括
int main(){
int-pid,i;
printf(“父进程已出生,我的pid为:%d\n”,getpid());
pid=fork();
开关(pid){
案例1:
/*发生了一个错误*/
printf(“Fork错误”);
打破
案例0:
/*此代码由子进程#1执行*/
printf(“第一个孩子出生了,我的pid是:%d\n”,getpid());

对于(i=1;i,
wait
函数接受一个参数,一个指向
int
的指针。省略该参数意味着可能会传递一些随机值,这意味着
wait
将尝试将子进程的退出状态写入某个随机内存位置,从而使程序崩溃。一个简单的修复方法是传递
NULL

wait(NULL);
如果您在编译程序时启用了警告,编译器应该对此发出警告。例如,
gcc
会告诉您:

test.c: In function ‘main’:
test.c:40:9: warning: implicit declaration of function ‘wait’ [-Wimplicit-function-declaration]
test.c:45:1: warning: control reaches end of non-void function [-Wreturn-type]

此代码在这里看起来正确并且运行正常。您的环境似乎有问题。我看到的唯一可能的代码问题是:您确定
%d
pid\t
的正确格式代码吗?它可能比
int
大或小。我使用的是NOVA和windows 8,这可能是个问题吗?我不知道关于NOVA的事情。哇,非常感谢你解决了这个问题!不过我在编译的时候从来没有遇到过这样的错误。