刚学UNIX编程,请教一个简单问题
void main(void)
{
char buf[MAXLINE];
pid_t pid;
int status;
printf("%%");
while (fgets(buf, MAXLINE, stdin != NULL))
{
buf[strlen(buf)-1] = 0;
}
if ((pid=fork()) < 0)
{
err_sys("fork err");
}
else if (pid == 0)
{
execlp(buf, buf, (char*)0);
err_ret("couldn't execute: %s", buf);
exit(127);
}
if ((pid=waitpid(pid, &status, 0)) < 0)
{
err_sys("waitpid err");
printf("%%");
}
exit(0);
}
上面这段程序就我个人理解,执行后会有三个进程,第一个进程就是第一次执行的时候产生的,然后用fork复制了一个进程本身是第二个进程。然后在第二个进程里用execlp产生了第三个进程。。。不知道我理解对不对?
另外,fork对第一个进程返回ProcessID,对第二个进程返回0,对吗?
我还有个疑问就是:当第一个进程执行到fork那条语句的时候,书上说是复制了进程本身,这个复制到底是什么概念?复制的新进程从什么地方开始执行?从程序最开始执行吗?那岂不是新复制的进程又要执行一次fork?或者是从fork那条语句之后开始执行?
最后一个疑问就是根本没有对execlp的返回值进行判断,就直接输出couldn't execute,为什么?
谢谢,我是UNIX新手,请各位多帮助。分数不多。