您的位置:首页 > 编程语言

1. 请教fork运行机制-UNIX环境编程学习

2011-02-20 21:39 246 查看
先看代码:

#include <sys/types.h>
#include <sys/wait.h>
#include "../ourhdr.h"
int main(int argc, char* argv[])
{
char buf[MAXLINE] = "";
pid_t pid = 0;
int status = 0;
printf("%% ");
while(fgets(buf, MAXLINE, stdin) != NULL)
{
buf[strlen(buf) - 1] = 0;
if((pid = fork()) < 0)
printf("fork error");
else if(pid == 0)
{
execlp(buf, buf, (char *)0);
printf("couldn't execute: %s", buf);
exit(127);
}
if((pid = waitpid(pid, &status, 0)) < 0)
printf("waitpid error");
printf("%% ");
}
exit(0);
}


书中分析:

• 调用f o r k创建一个新进程。新进程是调用进程的复制品,故称调用进程为父进程,新创
建的进程为子进程。f o r k对父进程返回新子进程的非负进程I D,对子进程则返回0。因为f o r k创
建一新进程,所以说它被调用一次(由父进程),但返回两次(在父进程中和在子进程中)。


但是测试时通过子进程中execlp(buf, buf, (char *)0)运行某程序后会阻塞?因为如果正常执行的话,总是要调用execlp后面的printf输出吧。

父程序阻塞应该发生在waitpid时,想知道父程序/子进程/waitpid之间怎么运转的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐