进程创建关于fork()浅解
2016-12-04 22:01
399 查看
# include<stdio.h> main() { int p1, p2; while((p1=fork())= = -1); if(p1= =0) putchar(‘b’); else { while((p2=fork())= =-1); if(p2= =0) putchar(‘c’); else putchar( ‘a’); } }
c语言调用函数while((p1=fork())==-1)是什么意思
相关说明: (p1=fork())==-1是什么情况?
那这个函数是什么意思呢?
int p1,p2;
while((p1=fork())==-1);
if(p1!=0)
{
while((p2=fork())==-1);
if(p2==0) putchar('b');
else putchar('c');
}
else putchar('a');
说是父进程就输出a,子进程就输出b和c,无法理解啊
(p1=fork())==-1
分解为2步:
p1=fork()
p1==-1
这么分解,应该清楚了吧?
creates a child process that differs from the parent process only in its PID and PPID, and in the fact that resource utilizations are set to 0. File locks and pending signals are not inheritedsgainhsu的回答就挺好的。
下面是man fork的描述
如果等于赋值语句p1=fork()和循环语句while(p1==-1)的复合写法
fork函数的返回值赋值给p1,则继续执行循环体,并判断p1是否等于-1
fork()应该是一个不带参数,返回一个int型数据的函数吧,
while((p1=fork())==-1);的意思是:
调用fork()函数,将返回值交给p1,然后判断p1是否等于-1;
看到这个我想到了,输入多个字符时吸收换行符的办法:
while((ch=getchar())!='\n');
c语言调用函数while((p1=fork())==-1)的意思是:
fork函数是在当前进程中新建立一个子进程,如果这个创建子进程失败,那么返回-1,这个实际是把创建进程的返回值和-1比较看看是否创建失败。
因为是写在while语句里,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork())==-1,等于不断重复创建子进程一直到创建成功为止。
注意这里会返回两次,因为父进程创建子进程的时候复制了父进程的地址空间,那么父子进程地址空间的语句执行都在等待fork返回的那句话里。
所以返回两次是父进程返回一个,返回的是子进程的ID,子进程返回一次,返回的是0.
那么我们根据不同的返回值就可以分别写出我们想要的父子进程的逻辑。
p1=fork()失败的情况下会返回-1
while((p1=fork())==-1)中就是对失败的情况进行处理
fork函数是在当前进程中新建立一个子进程,如果这个创建子进程失败,那么返回-1,这个实际是把创建进程的返回值和-1比较看看是否创建失败。
因为是写在while语句里,那么当创建失败之后,如果在while里面没有break或者跳出,当while执行体执行结束后又会执行(p1=fork())==-1,等于不断重复创建子进程一直到创建成功为止。
注意这里会返回两次,因为父进程创建子进程的时候复制了父进程的地址空间,那么父子进程地址空间的语句执行都在等待fork返回的那句话里。
所以返回两次是父进程返回一个,返回的是子进程的ID,子进程返回一次,返回的是0.
那么我们根据不同的返回值就可以分别写出我们想要的父子进程的逻辑。
相关文章推荐
- 转载:关于fork创建子进程的疑问
- 关于fork创建子进程的疑问
- 关于fork 创建进程
- 关于Python3中多次fork创建进程的问题
- 关于fork进程创建和进程上下文切换时现场保存的个人理解
- 关于fork&exec之进程的创建和可执行程序的加载过程
- fork() 创建新进程
- 关于多进程编程中fork()函数返回两次的探究
- Linux 内核--fork()函数创建进程 (续)之copy_mem(int nr, struct task_struct *p)
- linux 任务调度,进程创建(fork)(2.6内核)
- 创建进程fork()函数使用
- 进程的创建 —— do_fork()函数详解
- Linux 内核--fork()函数创建进程
- Linux0.11内核--fork()函数创建进程
- 内核进程创建之分配task_struct(do_fork->copy_process->dup_task_struct())
- linux中fork创建进程讲解
- Linux基础学习系列:对于fork()函数的学习,及进程创建相关知识
- linux中fork创建进程讲解
- Linux 内核--fork()函数创建进程
- 关于判断CreateProcess创建的子进程何时退出和CRichEditCtrl::FindText()一直返回-1的问题解决。