社区
Linux_Kernel
帖子详情
fork()创建进程
CharCollins
2012-01-02 07:19:43
求帮助,关于UNIX下的进程问题
程序void main(){
int a=10;
printf("a=%d\n",a);
fork();
a+=10;
printf("a=%d\n",a);
fork();
a+=10;
printf("a=%d\n",a);
}
问程序从初始运行到全部结束,系统一共创建了几个进程???
...全文
195
16
打赏
收藏
fork()创建进程
求帮助,关于UNIX下的进程问题 程序void main(){ int a=10; printf("a=%d\n",a); fork(); a+=10; printf("a=%d\n",a); fork(); a+=10; printf("a=%d\n",a); } 问程序从初始运行到全部结束,系统一共创建了几个进程???
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
binghunjin
2013-02-04
打赏
举报
回复
有收获,谢谢!
CharCollins
2012-01-04
打赏
举报
回复
[Quote=引用 13 楼 cliffbaby 的回复:]
不是的吧。
wait只是会暂时停止目前进程的执行,直到有信号来到或子进程结束。
我认为应该是:
10 (父)
20 (子1)
30 (子2)
30 (子1)
20 (父)
30 (子3)
30 (父)
[/Quote]
谢谢,学习了
子谋
2012-01-03
打赏
举报
回复
一共创建了3个子进程……
由于fork函数的特性是执行一次返回两次,所以嵌套使用后,printf的执行次数是:2^n-1次……
也就是:2^3-1=7次……
cliffbaby
2012-01-03
打赏
举报
回复
不好意思,网速卡了下,发了两次。
cliffbaby
2012-01-03
打赏
举报
回复
不是的吧。
wait只是会暂时停止目前进程的执行,直到有信号来到或子进程结束。
我认为应该是:
10 (父)
20 (子1)
30 (子2)
30 (子1)
20 (父)
30 (子3)
30 (父)
cliffbaby
2012-01-03
打赏
举报
回复
不是的吧。
wait只是会暂时停止目前进程的执行,直到有信号来到或子进程结束。
应该是:
10 (父)
20 (子1)
30 (子2)
30 (子1)
20 (父)
30 (子3)
30 (父)
CharCollins
2012-01-03
打赏
举报
回复
[Quote=引用 9 楼 charcollins 的回复:]
是这样理解。调用fork()后有新进程1,子进程1和父进程main都会执行fork()后面的语句,所以a=20打两次(其中main打印一次,子线程也打),并且又有fork()所以ma……
[/Quote]
没有让子线程终止,所以就会嵌套,这是我的理解
如果改成
void main(){
int a=10;
printf("a=%d\n",a);
fork();
a+=10;
wait();
printf("a=%d\n",a);
fork();
a+=10;
wait();
printf("a=%d\n",a);
}
结果是不是
a=10
a=20
a=30
请问楼上的大牛是不是这样的???
CharCollins
2012-01-03
打赏
举报
回复
[Quote=引用 7 楼 mesh4444 的回复:]
一共创建了3个子进程……
由于fork函数的特性是执行一次返回两次,所以嵌套使用后,printf的执行次数是:2^n-1次……
也就是:2^3-1=7次……
[/Quote]
是这样理解。调用fork()后有新进程1,子进程1和父进程main都会执行fork()后面的语句,所以a=20打两次(其中main打印一次,子线程也打),并且又有fork()所以main和1又建新线程2,3,而main,1,2,3都要打印所以就4次了。
cliffbaby
2012-01-03
打赏
举报
回复
[Quote=引用 7 楼 mesh4444 的回复:]
一共创建了3个子进程……
由于fork函数的特性是执行一次返回两次,所以嵌套使用后,printf的执行次数是:2^n-1次……
也就是:2^3-1=7次……
[/Quote]
对,创建3个, 加上父进程,一共有4个进程
cliffbaby
2012-01-02
打赏
举报
回复
一共4个吧。 怎么会7个呢?
Patricksolo
2012-01-02
打赏
举报
回复
一共创建了3个新的进程。LS看错了吧,只写了2个fork哦
AlburtHoffman
2012-01-02
打赏
举报
回复
1+2+4共7个进程啊
CharCollins
2012-01-02
打赏
举报
回复
补充一下,程序运行结果是
a=10
a=20
a=20
a=30
a=30
a=30
a=30
CharCollins
2012-01-02
打赏
举报
回复
请问为什么啊???
philip_puma
2012-01-02
打赏
举报
回复
1 + 2
进程
的
创建
编写一段程序,使用系统调用
fork
()
创建
两个子
进程
。当此程序运行时,
进程
的
创建
编写一段程序,使用系统调用
fork
()
创建
两个子
进程
。当此程序运行时, 在系统中有一个父
进程
和两个子
进程
活动。 让每一个
进程
在屏幕上显示一个字符:父
进程
显示“A”; 子
进程
分别显示字符“b”和“c”。试观察记录屏幕上的显示结果
linux下利用
fork
创建
进程
,
进程
运行内存说明,与同时
创建
多个
进程
的方法及分析
fork
的应用及同时
创建
多个
进程
的分析1
进程
及
进程
的
创建
1
进程
2 利用
fork
创建
进程
2 利用
fork
同时
创建
多个
进程
3
创建
多个
进程
的代码分析2级标题3级标题四级标题五级标题六级标题 1
进程
及
进程
的
创建
在linux编程中,用来
创建
用户
进程
的函数时
fork
。首先来说明什么是
进程
。 1
进程
什么是
进程
,引用百度百科的说明:
进程
(Process)是计算机中的程序关于某数据集合上的一次运行...
创建
进程
fork
——父
进程
与子
进程
fork
创建
进程
fork
系统调用是用于
创建
进程
的,并且
fork
创建
的
进程
初始化状态与父
进程
一样。(
进程
空间中的变量)系统会为
fork
的
进程
分配新的资源
fork
系统调用无参数。
fork
返回两次,(在父
进程
中)第一次返回子
进程
id,(在子
进程
中)第二次返回0 .换句话说就是返回子
进程
id的是父
进程
,返回0的是子
进程
。 测试代码 ...
Linux
进程
编程实践1——
进程
的基本概念、
fork
创建
进程
Linux
进程
编程实践——
进程
概念、
进程
描述、
fork
创建
进程
一、
进程
的基本概念1.1 程序 VS
进程
<1> 什么是程序?<2> 什么是
进程
?<3>
进程
和程序的区别1.2
进程
数据结构(描述
进程
)<1> 操作系统的
进程
描述——PCB<2> Linux下的
进程
描述——task_struct二、
fork
创建
进程
2.1 获取
进程
标识符与查看
进程
Q1:为什么要知道一个
进程
的PID以及它父
进程
的PID呢?2.2
fork
创建
进程
Q1:如何理解
进程
创建
?Q
用
fork
创建
进程
树
创建
一个如下图所示的
进程
树。用getpid()和getppid()梳理其关系。 要注意的是
fork
之后的子
进程
和父
进程
共享代码段,并且如果有写的情况下会有各自的数据段。 #include #include #include #include int main(int argc, char *argv) { printf("My pid is %d\n", getpid()); pid_
Linux_Kernel
4,438
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章