C 进程运行不正确
我的任务是编写一个创建三个进程的C程序(“procs.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是迭代次数 显示“第二个孩子悄然死
- 显示“第一个孩子出生了,我的pid是…”
- 显示十次消息“First child Executions iteration X”,其中X是迭代次数
- 显示“第一个孩子静静地死去。”
- 显示“第二个孩子出生了,我的pid是…”
- 显示十次消息“Second child Executions iteration X”,其中X是迭代次数
- 显示“第二个孩子悄然死去”
- 显示“父进程已出生,我的pid为…”
- 创建第一个子对象
- 创建第二个子对象
- 显示“父进程悄然死亡”
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的事情。哇,非常感谢你解决了这个问题!不过我在编译的时候从来没有遇到过这样的错误。