红联Linux门户
Linux帮助

菜鸟请教

发布时间:2008-12-10 17:20:26来源:红联作者:shenhang17
请大侠看下下面这个程序
#include
#include
#include
#include
int main(void)
{
pid_t pid;
if ((pid=fork())<0)
{
printf("fork error!\n");
exit(1);
}
else if(pid==0)
{
printf("child process\n");
}
else
{printf("parent process\n")
}
exit(0);
}
说是由于父进程和子进程的运行无关。其结果有可能是
child process
parent process
也有可能是
parent process
child process
我不明白的是:这里面的父进程指的是什么?而且还有判断完一遍pid的值后 怎么还会判断第二遍?
敬请大侠帮忙
文章评论

共有 4 条评论

  1. lans0625 于 2008-12-30 23:43:03发表:

    在子进程没有结束之前,它的父进程是可以结束的,此时,操作系统会指认一个在操作系统启动时
    就开启的进程作为该子进程的父进程。建议你学习一下《操作系统原理》。

  2. shenhang17 于 2008-12-10 22:04:33发表:

    我终于明白deepwhite的意思了。

  3. shenhang17 于 2008-12-10 19:42:44发表:

    哦 这样啊。
    可是pid的返回是在 子进程结束 或者 父进程结束时返回的。可是如果执行这个程序的父进程没有结束,也就不能有返回值。可是既然是执行这个程序的父进程,在这个程序没有结束之前就不能结束吧?
    我怎么觉得有点嵌套。

  4. deepwhite 于 2008-12-10 18:02:52发表:

    int main(void)
    {
    pid_t pid; //定义一个pid_t类型
    if ((pid=fork())<0) // 判断fork是否执行成功,失败的话会返回负值,并设置errno,
    {
    printf("fork error!\n");
    exit(1);
    }
    else if(pid==0) // pid == 0的话,表明该进程为子进程,它将负责处理子进程的相关任务。
    {
    printf("child process\n");
    }
    else //这里的潜台词为(pid !=0),表明该进程为父进程,负责处理父进程的任务。
    {printf("parent process\n")
    }
    exit(0);
    }

    父进程就是执行你的这个程序的进程,可以在父进程中使用getpid()来查看一下。为什么会判断两遍,看看给你加的注释就知道了,他们的作用不同。