乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
perl 0.10 多进程编程
2016-05-21 11:54:04
63
0
0
admin
#触发新进程 ##调用bash ```perl $a=system("cat ./a.pl"); #$a 是命令的返回值 $result = $? >> 8; #这样才能得到准确的返回值,系统的返回值16位,perl 的8位 $a=`cat cat ./a.pl`; #$a 是命令的输出 $result = $? >> 8; #这样才能得到准确的返回值,系统的返回值16位,perl 的8位 ``` ##fork 出新进程 fock() 将原来进程复制出一个新的子进程,父进程中fock()返回子进程ID, 子进程中fock()返回0 waitpid( pid , waitflag) 等待子进程结束并返回已结束的进程id, 不存在返回-1 其中pid=0 就等待所有进程的组id 与当前进程相同的进程,pid=-1 则等待所有子进程。 waitflag=WNOHANG 允许在子进程尚未结束的时候直接返回0,不然会等子进程结束。 更多waitflag http://perldoc.perl.org/POSIX.html#WAIT ```perl #!/usr/bin/perl use warnings; use strict; use POSIX; #这个模块使你可以调用一些系统的接口 $| = 1; my $max_back_jobs=5; my $total_jobs=30; my $current_back_jobs=0; print "i am $$\n"; my $run_jobs=0; for ($run_jobs=0;$run_jobs<$total_jobs;$run_jobs++) { print "run====>$run_jobs=>$$\n"; my $pid = fork(); if ( $pid == 0 ) #子进程 { print "I am child$$\n"; sleep 5; exit; } elsif (!defined $pid) #fork 失败 {print "fork failed!!\n";exit;} else { print "I am parent$$\n"; $current_back_jobs = $current_back_jobs + 1; print "current_back_jobs => $current_back_jobs\n"; while ( $current_back_jobs > $max_back_jobs ) { my $this_pid = waitpid(-1,&POSIX::WNOHANG); while ($this_pid > 0) #回收子进程,否则是僵尸进程,直至父进程结束才会消失 { print "End this pid $this_pid\n"; $current_back_jobs = $current_back_jobs-1; $this_pid = waitpid(-1,&POSIX::WNOHANG); } sleep 1; } } } my $this_pid = waitpid(-1,&POSIX::WNOHANG); while ( $this_pid != -1 ) { if ( $this_pid != 0 ) {print "End this pid $this_pid\n";} sleep 1; $this_pid = waitpid(-1,&POSIX::WNOHANG); } ```
上一篇:
perl 0.09 针对信号做出反应和timeout例子
下一篇:
perl 0.11 引用
文档导航