有关fork的疑问
时间:2011-06-21
来源:互联网
- for (my $i = 0; $i < 10; $i ++) {
- ## == fork a new process ==
- my $pid = fork();
- if (!defined($pid)) {
- print "Error in fork: $!";
- exit 1;
- }
- if ($pid == 0) {
- ## == child proc ==
- print "Child $i : My pid = $\n";
- sleep(5);
- print "Child $i : end\n";
- exit 0;
- }
- sleep(1);
- }
-
- exit 0;
作者: kingwmj 发布时间: 2011-06-21
kingwmj 发表于 2011-06-21 09:15
buffer,兄弟,buffer.
作者: 兰花仙子 发布时间: 2011-06-21
姐姐,能再说详细一点吗?还是不太理解啊。
作者: kingwmj 发布时间: 2011-06-21
作者: 兰花仙子 发布时间: 2011-06-21
谢谢仙子姐姐,print 到屏幕也有buffer问题啊,我还以为只有写硬盘才会有这种问题。再请教一下,怎样才能让所有的子进程都结束以后,再进行下一步的工作?比如下面的代码,让最后的print 在所有子进程都结束以后运行?
- use strict;
- use warnings;
-
- for (my $i = 0; $i < 10; $i ++) {
- ## == fork a new process ==
- my $pid = fork();
- if (!defined($pid)) {
- print "Error in fork: $!";
- exit 1;
- }
- if ($pid == 0) {
- ## == child proc ==
- $|++;
- print "Child $i : My pid = $\n";
- sleep(5);
- print "Child $i : end\n";
- exit 0;
- }
- sleep(1);
- }
-
- print "all child process is end\n";
作者: kingwmj 发布时间: 2011-06-21
谢谢仙子姐姐,print 到屏幕也有buffer问题啊,我还以为只有写硬盘才会有这种问题 ...
kingwmj 发表于 2011-06-21 10:15
(1) $|++放在开头就行。
(2)用waitpid回收子进程,见置顶帖子里我的示例。
作者: 兰花仙子 发布时间: 2011-06-21
好的,谢谢仙子姐姐,刚接触这块,有很多东西还不懂啊。
作者: kingwmj 发布时间: 2011-06-21
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28