LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: sybaselu

一个很次的问题:在linux环境中有几个父进程

[复制链接]
发表于 2005-1-5 13:24:46 | 显示全部楼层
非常简单的问题,A是他爸爸的儿子,A的爸爸是A的父亲,A也可以生一
堆儿子,但是只能有一个老子,A的儿子A和他爸爸以及他爸爸的爸爸
等等是init的儿孙,init是他们的祖宗.init长生不老,A和他爸爸却都会死,
A的爸爸死了init就收养A,A生了儿子后死了init就收养A的儿子.
发表于 2005-1-5 14:37:37 | 显示全部楼层
Post by sybaselu
子进程当然可以再产生自己的子进程。但是在《UNIX ADVANCED PROGRAMMING》好像是这本书AUTHOR BY STEVERN,关于进程这一章明确的提到UNIX/LINUX系统只有一个父进程init.反之,如果系统不只有一个父进程,那么init作为父进程又如何理解。不吝赐教!

按照你这个说法,地球上不论有多少人,只能有一个父亲啦?!!
 楼主| 发表于 2005-1-5 16:57:47 | 显示全部楼层
那我们能不能将init称为parent process呢?或是祖宗进程(UNIX/LINUX中好像没这个进程啊)
发表于 2005-1-5 18:01:48 | 显示全部楼层
可以将init称为所有进程的根进程。当然,它本身也是一个parent process
发表于 2005-1-5 18:38:42 | 显示全部楼层
Post by kj501
可以将init称为所有进程的根进程。当然,它本身也是一个parent process


You are right!
发表于 2005-1-5 23:15:47 | 显示全部楼层
我是这样理解:

“像init这样的父进程只有一个“

父、子进程是相对的,一个进程创建一个新进程称为创建了子进程,相反的,创建子进程的进程称为父进程。

所有的进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫做init进程。init进程是内核自举后第一个启动的进程。init引导系统、启动守护进程并且运行必要的程序。所以init可以说是所有进程的父进程。

兄弟是钻了牛角尖了!

我现在正在看这本书:《GNU/Linux编程指南》(第二版)   [美]Kurt Wall 等著  张辉 译
 楼主| 发表于 2005-1-6 09:43:05 | 显示全部楼层
就像刚开始这段代码,main()作为主程序的一次运行诞生了爹进程,期间用fork()生了一个儿进程,分配了两个MEM区域作为爹儿进程的执行空间。
int main()
{
int fd,pid;
int pd[2];
pid = fork();
if(pid == 0) //child
{
close(pd[0]);
read(pd[1],&fd,sizeof(int));
...... }
if(pid >0) //parent
{
close(pd[1]);
fd = open("select_serv.c",O_RDONLY,00700);
write(pd[0],&fd,sizeof(int));
........
}
return 0;
}
当pid==0时,由儿进程执行下面这段代码:
close(pd[0]);
read(pd[1],&fd,sizeof(int));
反之,由爹进程main()执行下面这段代码:

close(pd[1]);
fd = open("select_serv.c",O_RDONLY,00700);
write(pd[0],&fd,sizeof(int));
........
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表