[问题]父进程调用子进程问题!(请高手指教!)

C、C++和Java语言
回复
机器机器
帖子: 1
注册时间: 2007-03-24 20:50
送出感谢: 0
接收感谢: 0

[问题]父进程调用子进程问题!(请高手指教!)

#1

帖子 机器机器 » 2007-03-24 21:05

自己写了一个程序,部分代码如下(省略头文件和函数声明):

main(){
char** args;
while(1){
printf("myshel>");
args=getline();
if(!strcmp(args[0],"do")){
do();
}
}
}

void do(){
pid_t val;
if(val=fork()){
wait():
printf("pid:%d",val);
}
else
exit(0);
}

myshell>do
myshell>do
段错误

此程序就是只要有输入,就创建一个 子进程,但是第一次输入程序正常,第二次就出现段错误,是怎么回事?

然后把此程序改为如下就没有了段错误:
main(){
pid_t val;
char** args;
while(1){
printf("myshel>");
args=getline();
if(!strcmp(args[0],"do")){
if(val=fork()){
wait():
printf("pid:%d\n",val);
}
else
exit(0);
}
}
}
但是又出现了新的错误,就是第一次输入正常,接下来几次输入WAIT()方法都无效了。

myshell>do
pid:3421
myshell>do
myshell>pid:3872
do
myshell>pid:2342

是怎么回事呢?
头像
qlhn
帖子: 736
注册时间: 2006-08-25 10:37
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 qlhn » 2007-03-27 14:48

我也并非高手.看了你的程序,你是想编写自己的shell吧 .
问题是fork()之后子进程也创建了它的子进程吧.
我也有点晕,wait()挂起的是父进程还是子进程呢?
回复

回到 “C/C++/Java”