- 浏览: 1525489 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
第一贴:cu上关于fork()函数的精辟分析 声明:在别人的博客上看到这篇文章,真的很精辟,把问题一下子讲清楚了。所以,特意转贴在此,向各位高人致敬,也向原贴主致谢!本人不改变原贴的风貌。 查看原文
作者:ccf 发表于:2006-04-01 17:11:01
#include <unistd.h>; #include <sys/types.h>;
main ()
{
pid_t pid;
pid=fork();
if (pid < 0)
printf("error in fork!");
else if (pid == 0)
printf("i am the child process, my process id is %dn",getpid());
else
printf("i am the parent process, my process id is %dn",getpid());
}
结果是
[root@localhost c]# ./a.out
i am the child process, my process id is 4286
i am the parent process, my process id is 4285
我就想不到为什么两行都打印出来了,在我想来,不管pid是多少,都应该只有一行才对
chg.s 回复于:2004-04-27 21:09:30
要搞清楚fork的执行过程,就必须先讲清楚操作系统中的“进程(process)”概念。一个进程,主要包含三个元素:
o. 一个可以执行的程序;
o. 和该进程相关联的全部数据(包括变量,内存空间,缓冲区等等);
o. 程序的执行上下文(execution context)。
不妨简单理解为,一个进程表示的,就是一个可执行程序的一次执行过程中的一个状态。操作系统对进程的管理,典型的情况,是通过进程表完成的。进程表中的每一个表项,记录的是当前操作系统中一个进程的情况。对于单 CPU的情况而言,每一特定时刻只有一个进程占用 CPU,但是系统中可能同时存在多个活动的(等待执行或继续执行的)进程。
一个称为“程序计数器(program counter, pc)”的寄存器,指出当前占用 CPU的进程要执行的下一条指令的位置。
当分给某个进程的 CPU时间已经用完,操作系统将该进程相关的寄存器的值,保存到该进程在进程表中对应的表项里面;把将要接替这个进程占用 CPU的那个进程的上下文,从进程表中读出,并更新相应的寄存器(这个过程称为“上下文交换(process context switch)”,实际的上下文交换需要涉及到更多的数据,那和fork无关,不再多说,主要要记住程序寄存器pc指出程序当前已经执行到哪里,是进程上下文的重要内容,换出 CPU的进程要保存这个寄存器的值,换入CPU的进程,也要根据进程表中保存的本进程执行上下文信息,更新这个寄存器)。
好了,有这些概念打底,可以说fork了。当你的程序执行到下面的语句:pid=fork();
操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!此时程序寄存器pc,在父、子进程的上下文中都声称,这个进程目前执行到fork调用即将返回(此时子进程不占有CPU,子进程的pc不是真正保存在寄存器中,而是作为进程上下文保存在进程表中的对应表项内)。问题是怎么返回,在父子进程中就分道扬镳。
父进程继续执行,操作系统对fork的实现,使这个调用在父进程中返回刚刚创建的子进程的pid(一个正整数),所以下面的if语句中pid<0, pid==0的两个分支都不会执行。所以输出i am the parent process...
子进程在之后的某个时候得到调度,它的上下文被换入,占据 CPU,操作系统对fork的实现,使得子进程中fork调用返回0。所以在这个进程(注意这不是父进程了哦,虽然是同一个程序,但是这是同一个程序的另外一次执行,在操作系统中这次执行是由另外一个进程表示的,从执行的角度说和父进程相互独立)中pid=0。这个进程继续执行的过程中,if语句中 pid<0不满足,但是pid==0是true。所以输出i am the child process...
我想你比较困惑的就是,为什么看上去程序中互斥的两个分支都被执行了。在一个程序的一次执行中,这当然是不可能的;但是你看到的两行输出是来自两个进程,这两个进程来自同一个程序的两次执行。
我的天,不知道说明白了没……
zhaojinbo 回复于:2004-04-28 12:35:50
fork 之后,操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,但只有一点不同,如果fork成功,子进程中fork的返回值是0,父进程中 fork的返回值是子进程的进程号,如果fork不成功,父进程会返回错误。
可以这样想象,2个进程一直同时运行,而且步调一致,在fork之后,他们分别作不同的工作,也就是分岔了。这也是fork为什么叫fork的原因。
至于那一个最先运行,可能与操作系统有关,而且这个问题在实际应用中并不重要,如果需要父子进程协同,可以通过原语的办法解决。
sniper 回复于:2004-04-28 22:11:15
哦,偶明白了,在程序段里用了fork();之后程序出了分岔,派生出了两个进程。具体哪个先运行就看该系统的调度算法了。
在这里,我们可以这么认为,在运行到"pid=fork();"时系统派生出一个跟主程序一模一样的子进程。该进程的"pid=fork();"一句中 pid得到的就是子进程本身的 pid;子进程结束后,父进程的"pid=fork();"中pid得到的就是父进程本身的pid。因此该程序有两行输出。
注:此处不准确,在子进程中pid的值为0,通过getpid可以获取子进程的进程id;在父进程中pid为父进程编号。
勘误:父进程中的pid值为子进程进程号,只有父进程执行的getpid()才是他自己的进程号。寒,彻底的in了 (yanh_lzu:看了这两个错误的说法,相信大家都不会犯错误了。)
jjl3 回复于:2004-07-14 11:43:20
我做如下修改
结果是
[root@localhost c]# ./a.out
fork!i am the child process, my process id is 4286
fork!i am the parent process, my process id is 4285
但我改成printf("fork!n");后,结果是
[root@localhost c]# ./a.out
fork!
i am the child process, my process id is 4286
i am the parent process, my process id is 4285
为什么只有一个fork!打印出来了?上一个为什么有2个?
bashfulboy 回复于:2004-07-14 22:10:52
我也来一下:
wujiajia 的理解有些错误,
printf("AAAAAAAA");//print 一次; 这里会print 2次
如果你将 printf("AAAAAA") 换成 printf("AAAAAAn") 那么就是只打印一次了.
主要的区别是因为有了一个 n 回车符号
这就跟Printf的缓冲机制有关了,printf某些内容时,操作系统仅仅是把该内容放到了stdout的缓冲队列里了,并没有实际的写到屏幕上
但是,只要看到有 n 则会立即刷新stdout,因此就马上能够打印了.
运行了printf("AAAAAA") 后, AAAAAA 仅仅被放到了缓冲里,再运行到fork时,缓冲里面的 AAAAAA 被子进程继承了
因此在子进程度stdout缓冲里面就也有了 AAAAAA.
所以,你最终看到的会是 AAAAAA 被printf了2次!!!!
而运行 printf("AAAAAAn")后, AAAAAA 被立即打印到了屏幕上,之后fork到的子进程里的stdout缓冲里不会有 AAAAAA 内容
因此你看到的结果会是 AAAAAA 被printf了1次!!!!
(精要)
albcamus 回复于:2005-03-08 15:56:11
>;>;派生子进程的pid变量并没有被改变是什么意思 对于子进程来讲pid不就是0吗
1,派生子进程的进程,即父进程,其pid不变;
2,对子进程来说,fork返回给它0,但它的pid绝对不会是0;之所以fork返回0给它,是因为它随时可以调用getpid()来获取自己的pid;
3,楼上的楼上的你的观点是对的,fork之后夫子进程除非采用了同步手段,否则不能确定谁先运行,也不能确定谁先结束。认为子进程结束后父进程才从fork返回的,这是不对的,fork不是这样的,vfork才这样。
看过技术贴,再来看文档,就一下子理解了。 查看下文出处 第二贴:fork函数与vfork函数
一、fork
1. 调用方法
#include <sys/types.h>
#include <unistd.h> pid_t fork(void);
正确返回:在父进程中返回子进程的进程号,在子进程中返回0
错误返回:-1 子进程是父进程的一个拷贝。即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存的方式访问。fork返回后,子进程和父进程都从调用fork函数的下一条语句开始执行。
父进程与子进程的不同之处在于:fork的返回值不同——父进程中的返回值为子进程的进程号,而子进程为0
2. fork函数调用的用途
⑴ 一个进程希望复制自身,从而父子进程能同时执行不同段的代码。
⑵ 进程想执行另外一个程序 二、vfork
1. 调用方法
与fork函数完全相同
#include <sys/types.h>
#include <unistd.h> pid_t fork(void);
正确返回:在父进程中返回子进程的进程号,在子进程中返回0
错误返回:-1 2. vfork函数调用的用途
用vfork创建的进程主要目的是用exec函数执行另外的程序,与fork的第二个用途相同 三、fork与vfork的区别
1. fork要拷贝父进程的数据段;而vfork则不需要完全拷贝父进程的数据段,在子进程没有调用exec和exit之前,子进程与父进程共享数据段
2. fork不对父子进程的执行次序进行任何限制;而在vfork调用中,子进程先运行,父进程挂起,直到子进程调用了exec或exit之后,父子进程的执行次序才不再有限制 四、结束子进程
结束子进程不用exit(0),而使用_exit(0)。这是因为_exit(0)在结束进程时,不对标准I/O流进行任何操作。而exit(0)则会关闭进程的所有标准I/O流。
人家说的理解了,自己来试试看: 下文出处 首先是:jiangdamalong 2006-05-27 17:17:30 在 Linux/Unix社区 / 程序开发区 提问 先看一个程序
结果是返回a,b或者b,a
因为fork调用将执行两次返回分别从子进程和父进程返回
由于父进程和子进程无关,父进程与子进程都可能先返回
在看一个程序
为什么会返回6个字母??????????? 然后是 anguxiang 的回答: 事实上,理解fork()的关键在于它的返回点在哪里。fork最特殊的地方就在于他有两个甚至三个返回值,注意是同时返回两个值。其中pid=0的这个返回值用来执行子进程的代码,而大于0的一个返回值为父进程的代码块。第一次fork调用的时候生叉分为两个进程,不妨设为a父进程和b子进程。他们分别各自在第二次fork调用之前打印了b和a各一次;在第一次叉分的这两个进程中都含有
这段代码。很明显,a父进程和b子进程在这段代码中又各自独立的被叉分为两个进程。这两个进程每个进程又都打印了a,c各一次。到此,在程序中总共打印三次a两次c和一次b。总共6个字母。
注:在第一次叉分为两个进程的时候父子进程含有完全相同的代码(第二次仍然相同),只是因为在父子进程中返回的PID的值不同,父进程代码中的PID的值大于0,子进程代码中的值等于0,从而通过if这样的分支选择语句来执行各自的任务。 结束:向上面提到的高人们致敬!
http://blog.csdn.net/yanh_lzu/archive/2008/04/21/2311644.aspx
作者:ccf 发表于:2006-04-01 17:11:01
#include <unistd.h>; #include <sys/types.h>;
main ()
{
pid_t pid;
pid=fork();
if (pid < 0)
printf("error in fork!");
else if (pid == 0)
printf("i am the child process, my process id is %dn",getpid());
else
printf("i am the parent process, my process id is %dn",getpid());
}
结果是
[root@localhost c]# ./a.out
i am the child process, my process id is 4286
i am the parent process, my process id is 4285
我就想不到为什么两行都打印出来了,在我想来,不管pid是多少,都应该只有一行才对
chg.s 回复于:2004-04-27 21:09:30
要搞清楚fork的执行过程,就必须先讲清楚操作系统中的“进程(process)”概念。一个进程,主要包含三个元素:
o. 一个可以执行的程序;
o. 和该进程相关联的全部数据(包括变量,内存空间,缓冲区等等);
o. 程序的执行上下文(execution context)。
不妨简单理解为,一个进程表示的,就是一个可执行程序的一次执行过程中的一个状态。操作系统对进程的管理,典型的情况,是通过进程表完成的。进程表中的每一个表项,记录的是当前操作系统中一个进程的情况。对于单 CPU的情况而言,每一特定时刻只有一个进程占用 CPU,但是系统中可能同时存在多个活动的(等待执行或继续执行的)进程。
一个称为“程序计数器(program counter, pc)”的寄存器,指出当前占用 CPU的进程要执行的下一条指令的位置。
当分给某个进程的 CPU时间已经用完,操作系统将该进程相关的寄存器的值,保存到该进程在进程表中对应的表项里面;把将要接替这个进程占用 CPU的那个进程的上下文,从进程表中读出,并更新相应的寄存器(这个过程称为“上下文交换(process context switch)”,实际的上下文交换需要涉及到更多的数据,那和fork无关,不再多说,主要要记住程序寄存器pc指出程序当前已经执行到哪里,是进程上下文的重要内容,换出 CPU的进程要保存这个寄存器的值,换入CPU的进程,也要根据进程表中保存的本进程执行上下文信息,更新这个寄存器)。
好了,有这些概念打底,可以说fork了。当你的程序执行到下面的语句:pid=fork();
操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!此时程序寄存器pc,在父、子进程的上下文中都声称,这个进程目前执行到fork调用即将返回(此时子进程不占有CPU,子进程的pc不是真正保存在寄存器中,而是作为进程上下文保存在进程表中的对应表项内)。问题是怎么返回,在父子进程中就分道扬镳。
父进程继续执行,操作系统对fork的实现,使这个调用在父进程中返回刚刚创建的子进程的pid(一个正整数),所以下面的if语句中pid<0, pid==0的两个分支都不会执行。所以输出i am the parent process...
子进程在之后的某个时候得到调度,它的上下文被换入,占据 CPU,操作系统对fork的实现,使得子进程中fork调用返回0。所以在这个进程(注意这不是父进程了哦,虽然是同一个程序,但是这是同一个程序的另外一次执行,在操作系统中这次执行是由另外一个进程表示的,从执行的角度说和父进程相互独立)中pid=0。这个进程继续执行的过程中,if语句中 pid<0不满足,但是pid==0是true。所以输出i am the child process...
我想你比较困惑的就是,为什么看上去程序中互斥的两个分支都被执行了。在一个程序的一次执行中,这当然是不可能的;但是你看到的两行输出是来自两个进程,这两个进程来自同一个程序的两次执行。
我的天,不知道说明白了没……
zhaojinbo 回复于:2004-04-28 12:35:50
fork 之后,操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针也完全相同,但只有一点不同,如果fork成功,子进程中fork的返回值是0,父进程中 fork的返回值是子进程的进程号,如果fork不成功,父进程会返回错误。
可以这样想象,2个进程一直同时运行,而且步调一致,在fork之后,他们分别作不同的工作,也就是分岔了。这也是fork为什么叫fork的原因。
至于那一个最先运行,可能与操作系统有关,而且这个问题在实际应用中并不重要,如果需要父子进程协同,可以通过原语的办法解决。
sniper 回复于:2004-04-28 22:11:15
哦,偶明白了,在程序段里用了fork();之后程序出了分岔,派生出了两个进程。具体哪个先运行就看该系统的调度算法了。
在这里,我们可以这么认为,在运行到"pid=fork();"时系统派生出一个跟主程序一模一样的子进程。该进程的"pid=fork();"一句中 pid得到的就是子进程本身的 pid;子进程结束后,父进程的"pid=fork();"中pid得到的就是父进程本身的pid。因此该程序有两行输出。
注:此处不准确,在子进程中pid的值为0,通过getpid可以获取子进程的进程id;在父进程中pid为父进程编号。
勘误:父进程中的pid值为子进程进程号,只有父进程执行的getpid()才是他自己的进程号。寒,彻底的in了 (yanh_lzu:看了这两个错误的说法,相信大家都不会犯错误了。)
jjl3 回复于:2004-07-14 11:43:20
我做如下修改
#include <unistd.h>; #include <sys/types.h>; main () { pid_t pid; printf("fork!"); // printf("fork!n"); pid=fork(); if (pid < 0) printf("error in fork!"); else if (pid == 0) printf("i am the child process, my process id is %dn",getpid()); else printf("i am the parent process, my process id is %dn",getpid()); }
结果是
[root@localhost c]# ./a.out
fork!i am the child process, my process id is 4286
fork!i am the parent process, my process id is 4285
但我改成printf("fork!n");后,结果是
[root@localhost c]# ./a.out
fork!
i am the child process, my process id is 4286
i am the parent process, my process id is 4285
为什么只有一个fork!打印出来了?上一个为什么有2个?
bashfulboy 回复于:2004-07-14 22:10:52
我也来一下:
wujiajia 的理解有些错误,
printf("AAAAAAAA");//print 一次; 这里会print 2次
如果你将 printf("AAAAAA") 换成 printf("AAAAAAn") 那么就是只打印一次了.
主要的区别是因为有了一个 n 回车符号
这就跟Printf的缓冲机制有关了,printf某些内容时,操作系统仅仅是把该内容放到了stdout的缓冲队列里了,并没有实际的写到屏幕上
但是,只要看到有 n 则会立即刷新stdout,因此就马上能够打印了.
运行了printf("AAAAAA") 后, AAAAAA 仅仅被放到了缓冲里,再运行到fork时,缓冲里面的 AAAAAA 被子进程继承了
因此在子进程度stdout缓冲里面就也有了 AAAAAA.
所以,你最终看到的会是 AAAAAA 被printf了2次!!!!
而运行 printf("AAAAAAn")后, AAAAAA 被立即打印到了屏幕上,之后fork到的子进程里的stdout缓冲里不会有 AAAAAA 内容
因此你看到的结果会是 AAAAAA 被printf了1次!!!!
(精要)
albcamus 回复于:2005-03-08 15:56:11
>;>;派生子进程的pid变量并没有被改变是什么意思 对于子进程来讲pid不就是0吗
1,派生子进程的进程,即父进程,其pid不变;
2,对子进程来说,fork返回给它0,但它的pid绝对不会是0;之所以fork返回0给它,是因为它随时可以调用getpid()来获取自己的pid;
3,楼上的楼上的你的观点是对的,fork之后夫子进程除非采用了同步手段,否则不能确定谁先运行,也不能确定谁先结束。认为子进程结束后父进程才从fork返回的,这是不对的,fork不是这样的,vfork才这样。
看过技术贴,再来看文档,就一下子理解了。 查看下文出处 第二贴:fork函数与vfork函数
一、fork
1. 调用方法
#include <sys/types.h>
#include <unistd.h> pid_t fork(void);
正确返回:在父进程中返回子进程的进程号,在子进程中返回0
错误返回:-1 子进程是父进程的一个拷贝。即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存的方式访问。fork返回后,子进程和父进程都从调用fork函数的下一条语句开始执行。
父进程与子进程的不同之处在于:fork的返回值不同——父进程中的返回值为子进程的进程号,而子进程为0
2. fork函数调用的用途
⑴ 一个进程希望复制自身,从而父子进程能同时执行不同段的代码。
⑵ 进程想执行另外一个程序 二、vfork
1. 调用方法
与fork函数完全相同
#include <sys/types.h>
#include <unistd.h> pid_t fork(void);
正确返回:在父进程中返回子进程的进程号,在子进程中返回0
错误返回:-1 2. vfork函数调用的用途
用vfork创建的进程主要目的是用exec函数执行另外的程序,与fork的第二个用途相同 三、fork与vfork的区别
1. fork要拷贝父进程的数据段;而vfork则不需要完全拷贝父进程的数据段,在子进程没有调用exec和exit之前,子进程与父进程共享数据段
2. fork不对父子进程的执行次序进行任何限制;而在vfork调用中,子进程先运行,父进程挂起,直到子进程调用了exec或exit之后,父子进程的执行次序才不再有限制 四、结束子进程
结束子进程不用exit(0),而使用_exit(0)。这是因为_exit(0)在结束进程时,不对标准I/O流进行任何操作。而exit(0)则会关闭进程的所有标准I/O流。
人家说的理解了,自己来试试看: 下文出处 首先是:jiangdamalong 2006-05-27 17:17:30 在 Linux/Unix社区 / 程序开发区 提问 先看一个程序
main() { pid_t pid; if(pid=fork()<0) { printf("error!"); } else { if(pid==0) printf("a\n"); else printf("b\n"); } }
结果是返回a,b或者b,a
因为fork调用将执行两次返回分别从子进程和父进程返回
由于父进程和子进程无关,父进程与子进程都可能先返回
在看一个程序
main() { pid_t a_pid,b_fork; if(a_pid=fork()<0) { printf("error!"); } else { if(a_pid==0) printf("b\n"); else printf("a\n"); } if(b_pid=fork()<0) { printf("error!"); } else { if(b_pid==0) printf("c\n"); else printf("a\n"); } } 如果是创建两个进程则出现结果 b c a a c a
为什么会返回6个字母??????????? 然后是 anguxiang 的回答: 事实上,理解fork()的关键在于它的返回点在哪里。fork最特殊的地方就在于他有两个甚至三个返回值,注意是同时返回两个值。其中pid=0的这个返回值用来执行子进程的代码,而大于0的一个返回值为父进程的代码块。第一次fork调用的时候生叉分为两个进程,不妨设为a父进程和b子进程。他们分别各自在第二次fork调用之前打印了b和a各一次;在第一次叉分的这两个进程中都含有
if(b_pid=fork()<0) { printf("error!"); } else { if(b_pid==0) printf("c\n"); else printf("a\n"); } }
这段代码。很明显,a父进程和b子进程在这段代码中又各自独立的被叉分为两个进程。这两个进程每个进程又都打印了a,c各一次。到此,在程序中总共打印三次a两次c和一次b。总共6个字母。
注:在第一次叉分为两个进程的时候父子进程含有完全相同的代码(第二次仍然相同),只是因为在父子进程中返回的PID的值不同,父进程代码中的PID的值大于0,子进程代码中的值等于0,从而通过if这样的分支选择语句来执行各自的任务。 结束:向上面提到的高人们致敬!
http://blog.csdn.net/yanh_lzu/archive/2008/04/21/2311644.aspx
发表评论
-
Linux内核源码包的安装及编译zz
2009-12-15 20:58 4308http://my.donews.com/ecco2005/2 ... -
Linux内核Makefile文件(二)
2009-12-15 19:34 2453=== 6 体系Makefile文 ... -
Linux内核Makefile文件(一)
2009-12-15 19:34 1871本文是/Documentation/kbuild/make ... -
Linux加载模块命令
2009-12-15 19:28 2711安装模块insmod *.ko卸载 ... -
linux内核模块编程
2009-12-15 19:25 3605主题: linux内核模块的程序结构--模块加载函数(必须), ... -
编译linux内核~
2009-12-05 22:04 1422小菜鸟第一次编译linux内核。截图太多 。。不方便上传 = ... -
grub2 基础教程
2009-12-05 18:01 2792grub2基础教程-修订版 ... -
Ubuntu9.10版本没有了menu.lst文件!
2009-12-05 18:00 3152囧~现在都在grub下面配置了。 不过麦斯之前的men ... -
关于信号量与线程互斥锁的区别与实现
2009-11-30 14:37 2428之前一直没有怎么 ... -
Linux信号量线程控制
2009-11-30 14:31 3691线程中互斥锁的使用,达到对共享资源互斥使用。除了使用互斥锁, ... -
信号量和自旋锁
2009-11-29 21:56 1667内核同步措施 ... -
Linux信号量semaphore编程实例
2009-11-29 21:20 6593本例示范Linux信号量的基本用法。该范例使用了两个线程分别对 ... -
Linux获取当前时间
2009-11-29 21:16 3689Linux获取当前时间 ... -
pthread库学习(2): 线程的同步,使用信号量
2009-11-29 20:55 2502先看下面这段程序,主线程创建了三个线程,每个线程中均有一个打印 ... -
信号量的基本思想
2009-11-29 20:17 1492信号量是1965荷兰Dijkstra 为了解决并发进程问题 ... -
多进程通信方式一:管道(PIPE)
2009-11-27 18:29 9119进程通信(IPC)的几种方式及比较 撰文:黄显国08 ... -
进程的管道通信
2009-11-27 18:12 3017实验四 进程的管道通信 ... -
Linux下线程的挂起和恢复
2009-11-27 15:42 3753POSIX的Linux操作系统没有提供线程挂起和恢复的例程,在 ... -
Linux 编程之生成静态连接库
2009-11-27 15:41 1412静态库及动态库的建立 ... -
LInux高级编程 - 线程(Threads)
2009-11-27 15:40 1915LInux高级编程 - 线程(Threads) ...
相关推荐
* 对话期 ID * 当前工作目录 * 根目录 * 文件方式创建屏蔽字 * 资源限制 但是,子进程不继承父进程的: * 进程号 * 不同的父进程号 * 文件描述符和目录流的拷贝 * 子进程不继承父进程的进程、正文、数据和其他锁定...
学生需要熟悉与餐饮相关的基本词汇,如餐具(fork, knife, chopsticks)、食物(soup, beef, chicken)以及用餐习惯表达(Would you like...?)。 2. **对话排序**:这部分要求学生根据录音内容将句子排列成合理的...
1. 英语基础语法:题目中包含了丰富的英语基础语法,如名词复数形式(beef, bread, juice, rice, fish, vegetables, soup, noodles, chicken, knife, fork, spoon, chopsticks)、动词短语(would like, pass, use)...
这篇文档是针对四年级上册小学英语人教PEP版Unit 5 "Dinner's ready" 的单元测试卷,旨在评估学生对与餐饮相关的英语词汇、句型和听力理解的掌握程度。测试卷分为听力和笔试两大部分,涵盖单词辨认、图片匹配、句子...
例如,区分发音相近的单词"from", "form", "fork"等。 2. **短对话理解**:这是听力理解中的基础题型,主要考察学生对日常对话的理解,涵盖话题广泛,如饮食习惯、寻找物品、个人喜好等。例如,询问Jane过去常吃...
这个翻译使得俄罗斯玩家能够理解游戏中的对话和文本,增加了游戏的可访问性,让他们能够享受完整的游戏体验。 其次,"钢铁天空下"(Under a Steel Sky)是一款1994年发布的冒险游戏,以其独特的科幻设定和引人入胜...
对话 应用程序的模态对话框和弹出窗口提供程序。 ngDialog 很小(~2Kb),具有简约的 API,通过主题高度可定制,并且只有 Angular.js 作为依赖项。 安装 您可以手动下载所有必需的 ngDialog 文件或使用 bower 安装...
1. 餐饮用具词汇:文档列出了如`knife`(刀)、`fork`(叉)、`chopsticks`(筷子)、`bowl`(碗)、`spoon`(勺子)、`beef`(牛肉)、`chicken`(鸡肉)和`vegetables`(蔬菜)等词汇,这些都是与用餐相关的基础...
首先,课件介绍了几个常见的餐具和厨房用具,如 knife(刀)、fork(叉)、spoon(勺)、glass(玻璃杯)、plate(盘子)。在这里,区分了 plate 和 dish 的不同,plate 通常指的是较大的平盘,而 dish 更倾向于指较...
* fork:指餐叉,用于餐桌上吃食物 * spoon:指餐匙,用于餐桌上吃食物 * glass:指玻璃杯,用于喝水或其他饮料 * plate:指大的平盘子,用于餐桌上盛放食物 * dish:指小的碟子,用于餐桌上盛放食物 * shelf:指...
例如,`car, arm, art`共享字母组合`ar`,`fork, for, horse`有字母`or`的规律,`sister, dinner, brother`都与家庭成员有关,`girl, bird, nurse`都是名词,`word, worm, word`重复了单词`word`。 4. **听辨句子**...
- **听音,选择听到的单词**:这部分测试学生对基本英语单词的听力辨识能力,包括体育用品(baseball, badminton, basketball)、家居物品(pillow, mirror, window)以及餐具(glass, fork, spoon)。学生需要熟悉...
2. 听音选择:这部分主要测试学生对情境对话的理解,比如询问英国人是否使用"chopsticks"(筷子)还是"fork"(叉子),以及中国人使用筷子是否容易。此外,还包括对物品、动作的识别,如"Sam's shorts are wet"...
例如,天气相关的回答(rainy, warm, That's cold!)和日常对话中的问候与回答(Hi, Mark!, It's warm.)等。 通过这次期中测试,教师可以评估学生在英语听力、词汇记忆、口语理解和语境应用等多方面的能力,并针对...
目前,它通过 AppleScript 接口与 Spotify 对话,因此目前仅支持 OS X。目标spotify-remote 试图成为一个轻量级的客户端服务器解决方案,用于控制您的 Spotify,尽可能地对电池和移动友好。 目前关于性能的主要问题...
此份文档是针对小学五年级学生的一份英语期末自查题,主要测试学生的听力理解能力,涉及词汇辨析、图片匹配、选择最佳答句以及补全对话等多个方面,旨在检验学生对英语基本词汇、语法和日常表达的掌握程度。...
这个文档是2021-2022年新版人教版PEP四年级上册英语第五单元的测试卷,主要测试学生对于基本的词汇、发音以及日常饮食相关的对话理解。以下是对试卷各部分知识点的详细解析: 1. **词汇分类**: - 第一部分题目...
在第三课时中,教学目标集中在掌握与早餐相关的一系列单词,例如餐具(a knife, a fork, a plate, a bowl, a cup, a bottle, a spoon, a glass, a cupboard, chopsticks, rice, bread)和句型"Where’s/Where are ...
【小学英语单词课教学设计模板】是一份针对小学阶段英语教学的详细教案,主要目标是教授与用餐相关的单词,如chopsticks(筷子)、fork(叉子)、knife(刀)、spoon(勺子)和plate(盘子)。这份教案采用了3P...
1. 英语词汇:题目中包含了多个英语单词,如"v,t,e,b,l,g,e,a,e,sn,c,h,e,i,k,cp,u,o,s"可以组成单词"vegetables"(蔬菜),"n,o,d,l,o,e,sf,e,b,er,a,e,b,d"可以组成"fork"(叉子)等。这些单词是日常生活中常见的...