当前位置: 技术问答>linux和unix
关于进程号pid的一个困惑,熟悉内核代码的请进来!!
来源: 互联网 发布时间:2015-10-09
本文导语: pid=fork();书上说若pid为0,则为子进程;若pid>0则为父进程。那么在这个子进程里再创建一个子进程2呢?岂不是所有子进程的pid都为0了??那还要waitpid()有何用,岂不是和wait()功能一样了??? 我看了0.11版的内核,...
pid=fork();书上说若pid为0,则为子进程;若pid>0则为父进程。那么在这个子进程里再创建一个子进程2呢?岂不是所有子进程的pid都为0了??那还要waitpid()有何用,岂不是和wait()功能一样了???
我看了0.11版的内核,发现fork()返回的子进程pid是由fork.c文件中的find_empty_process()函数获得的,其方法非常简单,就是(++last_pid)。然后在copy_process()函数中让p->pid=last_pid。由此看来,子进程的pid怎么会是0呢???
按照逻辑,应该只有认为0的pid为0啊!(在sched.h中对任务0进行的初始化。),其它进程都是任务0的子进程,其pid都应该大于0啊??
我当然知道进程号和任务号的区别,但还是迷惑:(
(注:我刚才又看了2.4内核,好像fork.c已经面目全非了,没有心情再看下去了,来这问问,呵呵)
我看了0.11版的内核,发现fork()返回的子进程pid是由fork.c文件中的find_empty_process()函数获得的,其方法非常简单,就是(++last_pid)。然后在copy_process()函数中让p->pid=last_pid。由此看来,子进程的pid怎么会是0呢???
按照逻辑,应该只有认为0的pid为0啊!(在sched.h中对任务0进行的初始化。),其它进程都是任务0的子进程,其pid都应该大于0啊??
我当然知道进程号和任务号的区别,但还是迷惑:(
(注:我刚才又看了2.4内核,好像fork.c已经面目全非了,没有心情再看下去了,来这问问,呵呵)
|
^_^ 你理解错误了
pid=fork()之后就有两个进程了(父进程,新建的字进程)
fork()要返回值 这是父进程和子进程已是两个独立并发进程
fork()向两个进程都返回一个值:加入fork()成功,将给父进程返回子进程PID(其必定大与零),给子进程返回一个零
父子进程将从fork()后的代码分道扬镳,各自相对对立运行
pid=fork()之后就有两个进程了(父进程,新建的字进程)
fork()要返回值 这是父进程和子进程已是两个独立并发进程
fork()向两个进程都返回一个值:加入fork()成功,将给父进程返回子进程PID(其必定大与零),给子进程返回一个零
父子进程将从fork()后的代码分道扬镳,各自相对对立运行
|
谁说子进程pid为0啊.你getpid()(得到当前),getppid(得到父)看看就知道进程id到底是什么了