主进程如何等待多个子进程结束
时间:2010-08-19
来源:互联网
主进程如何等待多个子进程结束
想完成这样的任务:
在主进程中创建多个子进程(比如3个),各个进程完成不同的任务,
现在想要等所有子进程都结束主进程才执行后面的语句,
如何实现这样的操作?
#!/usr/bin/perl
use POSIX ":sys_wait_h";
my $a=10;
for($i=1;$i<=3;$i++){
my $pid=fork();
if (!defined($pid)) {
print "Error in fork: $!";
exit 1;
}
if ($pid == 0 ) {
if($i==1){
sleep(9);
$b1=$a+1;
print "$b1\n";
exit 0;}
elsif($i==2){
sleep(5);
$b2=$a+10;
print "$b2\n";
exit 0;}
else{
sleep(3);
$b3=$a+100;
print "$b3\n";
exit 0; }
}
if ($zombies > 0) {
while (($collect = waitpid(-1, WNOHANG)) > 0) {
$zombies --;
}
}
}
print "~~~~~~~~~~split~~~~~~~~~~~\n";
print "$b1\t$b2\t$b3\n";
只是一个简单的例子,不是为了实现这个结果,而是为了实现子进程都结束主进程才执行后面的语句。
想完成这样的任务:
在主进程中创建多个子进程(比如3个),各个进程完成不同的任务,
现在想要等所有子进程都结束主进程才执行后面的语句,
如何实现这样的操作?
#!/usr/bin/perl
use POSIX ":sys_wait_h";
my $a=10;
for($i=1;$i<=3;$i++){
my $pid=fork();
if (!defined($pid)) {
print "Error in fork: $!";
exit 1;
}
if ($pid == 0 ) {
if($i==1){
sleep(9);
$b1=$a+1;
print "$b1\n";
exit 0;}
elsif($i==2){
sleep(5);
$b2=$a+10;
print "$b2\n";
exit 0;}
else{
sleep(3);
$b3=$a+100;
print "$b3\n";
exit 0; }
}
if ($zombies > 0) {
while (($collect = waitpid(-1, WNOHANG)) > 0) {
$zombies --;
}
}
}
print "~~~~~~~~~~split~~~~~~~~~~~\n";
print "$b1\t$b2\t$b3\n";
只是一个简单的例子,不是为了实现这个结果,而是为了实现子进程都结束主进程才执行后面的语句。
作者: zhuxiaolong2 发布时间: 2010-08-19
先把子进程PID保存下来,然后waitpid
作者: toniz 发布时间: 2010-08-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28