perl多进程实战之一
# test_proc.pl
# test multi process
# create by lianming: 2009-08-12
use warnings;
my $pid = fork();
print "Error in fork: $!";
exit 1;
}
print "Child: My pid = $$\n";
sleep(5);
print "Child: end\n";
exit 0;
} else {
print "Parent My pid = $$, and my child's pid = $pid\n";
sleep(5);
print "Parent: end\n";
}
Parent My pid = 19480, and my child's pid = 19481
Child: end
Parent: end
# test_proc_1.pl
# test multi process
# create by lianming: 2009-08-12
use warnings;
for (my $i = 0; $i < 10; $i ++) {
## == fork a new process ==
my $pid = fork();
print "Error in fork: $!";
exit 1;
}
print "Child $i : My pid = $$\n";
sleep(5);
print "Child $i : end\n";
exit 0;
}
sleep(1);
}
Child 1 : My pid = 20500
Child 2 : My pid = 20501
Child 3 : My pid = 20502
Child 4 : My pid = 20503
Child 0 : end
Child 5 : My pid = 20506
Child 1 : end
Child 6 : My pid = 20507
Child 2 : end
Child 7 : My pid = 20508
Child 3 : end
Child 8 : My pid = 20509
Child 4 : end
Child 9 : My pid = 20510
Child 5 : end
# Child 6 : end
Child 7 : end
Child 8 : end
Child 9 : end
root 20532 0.0 0.0 0 0 pts/2 Z+ 21:46 0:00 \_ [perl]
root 20535 0.0 0.0 0 0 pts/2 Z+ 21:46 0:00 \_ [perl]
root 20536 0.0 0.0 0 0 pts/2 Z+ 21:46 0:00 \_ [perl]
root 20539 0.0 0.0 0 0 pts/2 Z+ 21:46 0:00 \_ [perl]
root 20541 0.0 0.0 8460 720 pts/2 S+ 21:46 0:00 \_ perl test_proc_1.pl
root 20543 0.0 0.0 8460 720 pts/2 S+ 21:46 0:00 \_ perl test_proc_1.pl
root 20545 0.0 0.0 8460 720 pts/2 S+ 21:46 0:00 \_ perl test_proc_1.pl
root 20546 0.0 0.0 8460 720 pts/2 S+ 21:46 0:00 \_ perl test_proc_1.pl
root 20548 0.0 0.0 8460 720 pts/2 S+ 21:46 0:00 \_ perl test_proc_1.pl
if ($procid == 0) {
# == child process ==
print ("this line is printed first\n");
exit(0);
} else {
# == parent process ==
waitpid ($procid, 0);
print ("this line is printed last\n");
}
# test_proc_2.pl
# test multi process
# create by lianming: 2009-08-12
use warnings;
use POSIX ":sys_wait_h";
my $zombies = 0;
$SIG{CHLD} = sub { $zombies++ };
for (my $i = 0; $i < 10; $i ++) {
## == fork a new process ==
my $pid = fork();
print "Error in fork: $!";
exit 1;
}
print "Child $i : My pid = $$\n";
sleep(5);
print "Child $i : end\n";
exit 0;
}
if ($zombies > 0) {
while (($collect = waitpid(-1, WNOHANG)) > 0) {
$zombies --;
}
}
sleep(1);
}
Child 1 : My pid = 21553
Child 2 : My pid = 21554
Child 3 : My pid = 21555
Child 4 : My pid = 21556
Child 0 : end
Child 5 : My pid = 21558
Child 1 : end
Child 6 : My pid = 21570
Child 2 : end
Child 7 : My pid = 21572
Child 3 : end
Child 8 : My pid = 21574
Child 4 : end
Child 9 : My pid = 21575
Child 5 : end
# Child 6 : end
Child 7 : end
Child 8 : end
Child 9 : end
root 21558 0.0 0.0 8280 1168 pts/2 S+ 22:07 0:00 \_ perl test_proc_2.pl
root 21570 0.0 0.0 8280 1168 pts/2 S+ 22:07 0:00 \_ perl test_proc_2.pl
root 21572 0.0 0.0 8280 1168 pts/2 S+ 22:07 0:00 \_ perl test_proc_2.pl
root 21574 0.0 0.0 8280 1168 pts/2 S+ 22:07 0:00 \_ perl test_proc_2.pl
root 21575 0.0 0.0 8280 1168 pts/2 S+ 22:07 0:00 \_ perl test_proc_2.pl
# test_proc_3.pl
# test multi process
# create by lianming: 2009-08-12
use warnings;
use POSIX ":sys_wait_h";
my $num_proc = 0;
my $num_collect = 0;
$SIG{CHLD} = sub { $num_proc-- };
my $pid = fork();
print "Error in fork: $!";
exit 1;
}
print "Child $i : My pid = $$\n";
sleep(5);
print "Child $i : end\n";
exit 0;
}
if (($i-$num_proc-$num_collect) > 0) {
while (($collect = waitpid(-1, WNOHANG)) > 0) {
$num_collect ++;
}
}
do {
sleep(1);
} until ($num_proc < 3);
}
Child 1 : My pid = 22642
Child 2 : My pid = 22643
Child 0 : end
Child 3 : My pid = 22645
Child 1 : end
Child 4 : My pid = 22647
Child 2 : end
Child 5 : My pid = 22658
Child 3 : end
Child 6 : My pid = 22660
Child 4 : end
Child 7 : My pid = 22661
Child 5 : end
Child 8 : My pid = 22663
Child 6 : end
Child 9 : My pid = 22664
Child 7 : end
# Child 8 : end
Child 9 : end
root 22660 0.0 0.0 0 0 pts/2 Z+ 22:29 0:00 \_ [perl]
root 22661 0.0 0.0 8116 1168 pts/2 S+ 22:29 0:00 \_ perl test_proc_3.pl
root 22663 0.0 0.0 8116 1168 pts/2 S+ 22:29 0:00 \_ perl test_proc_3.pl
root 22664 0.0 0.0 8116 1168 pts/2 S+ 22:29 0:00 \_ perl test_proc_3.pl
perl多进程实战之一相关推荐
- perl脚本实战总结
# 获取环境变量的值 my $java_home = $ENV{"JAVA_HOME"}; 字符串 截取字符串 # 截取字符串,从索引为3的位置(含)开始,截取长度为3 my su ...
- python多进程实战——4k图片抓取
技术交流贴:不可用于违法违规用途 成果图: 背景:疫情宅家太无聊了,练习了一下爬虫,里面用到了伪装请求头.多进程.代理IP等技术 开始: 首先我们来分析一下网页,只要找到我们需要的清析度的图片真实网址 ...
- python3多线程实战(python3经典编程案例)
python3多进程实战(python3经典编程案例) python3多线程实战(python3经典编程案例) python3 协程实战(python3经典编程案例) 总结: python多线程适用在 ...
- Cpython解释器下实现并发编程——多进程、多线程、协程、IO模型
一.背景知识 进程即正在执行的一个过程.进程是对正在运行的程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都 ...
- 架构 php_十年PHP架构师的成长之路,程序员必备
不知不觉自己做开发已经十年了,这十年中我获得了技术能力.CTO.大公司的经历.但再仔细一想,这十年中我至少浪费了五年时间走了很多弯路,这五年可以足够让自己成长为一个优秀的程序员,我用这五年时间和很多程 ...
- python logger handler_Python中的logger和handler到底是个什么鬼
最近的任务经常涉及到日志的记录,特意去又学了一遍logging的记录方法.跟java一样,python的日志记录也是比较繁琐的一件事,在写一条记录之前,要写好多东西.典型的日志记录的步骤是这样的: 创 ...
- 服务器端PHP多进程编程实战
服务器端PHP多进程编程实战 http://developer.51cto.com 2010-10-15 08:57 Bruce Dou 博客 我要评论(0) PHP是目前应用最广泛的Web开 ...
- python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问
python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问 B站配套视频教程观看 uwsgi多进程配置 uwsgi.ini配置 nginx和uwsgi通过配置文件s ...
- 实战Perl脚本测试
实战Perl脚本测试(转) 这是一篇关于perl脚本测试的总结性文章,其中提到了很多实用的模块,如果文中介绍的不够详细,请到cpan上搜索该模块并查阅其文档. 1基本语法检查 Perl语言的哲学是& ...
最新文章
- 哈佛牙学院博士后:教你口腔保健基本功之牙线篇
- 深度学习在自然语言处理研究上的进展
- 命令行工具开发:如何快速实现命令行提示?
- 力扣--- 滑动谜题
- mac android 投屏幕,将android/ios屏幕投射到windows/mac的良好参考
- [转]bookmark整理之.NET编程相关
- mysql 队列表设计_mysql主从同步操作,及队列设计
- linux 下的带宽、延时、吞吐率、PPS
- 【通信】基于matlab GUI循环码编译码器【含Matlab源码 692期】
- Qt之SQLite数据库可视化工具
- 如何把直播嵌入微信公众账号
- opencv学习笔记---如何看懂照片的直方图
- 简单的爬取某租房网站租房信息并存入MySQL数据库
- 教你使用Python爬虫获取电子书资源实战!喜欢学习的小伙伴过来看啦!
- 单片机语音模块JQ8900-16P的几种触发方式与源码配置
- 【生信】初探基因定位和全基因组关联分析
- Matlab TRL校准(简易版)
- 三层网络渗透测试实验
- Google研究总监Peter Norvig:人工智能的另一面
- 文正教务系统微信开发
热门文章
- 高仿快递100--实战之RadioGroup和RadioButton应用
- C Primer Plus 第13章 文件输入/输出 13.11 编程练习答案
- 20161120-安全测试
- Nginx服务器开启gzip压缩功能额必要性
- 如何找到 AWS 环境下应用程序中易于得手的漏洞?
- 移动互联网新协议 GTP 中被曝多个高危漏洞,影响4G和5G 用户
- 出于安全考虑,谷歌禁用三款 Linux web 浏览器登录其服务
- P2898 [USACO08JAN]haybale猜测Haybale Guessing
- SCOM2012SP1环境准备和安装
- Struts2标签库整理【完整】