perl - 如何在 Perl 中分叉 30 个连接
问题描述
我正在编写一个监视脚本来登录数据库、执行任务和注销。我有 30 个数据库帐户。但是我希望我的 Perl 脚本能够通过 30 个同时登录来执行此任务,并且目前我的循环有一个迭代必须在另一个迭代开始之前完成。
#!/usr/bin/perl
use strict;
foreach my $i ( "01" .. "30" ) {
do stuff...
}
解决方案
简单的方法,取决于你的脚本可能需要做的其他事情,就是自己分叉 30 次,每个副本处理一个帐户。
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw/:sys_wait.h/;
my $nchildren = 0;
$SIG{"CHLD"} = sub { while (waitpid(-1, WNOHANG) > 0) { $nchildren -= 1; } };
for my $i ( "01" .. "30" ) {
my $pid = fork;
if (! defined $pid) {
die "Unable to fork: $!\n";
} elsif ($pid == 0) {
# Do stuff for account $i
exit 0; # And exit.
} else {
$nchildren += 1;
}
}
# Wait for all child processes to exit.
while ($nchildren > 0) {
sleep 1;
}
推荐阅读
- c# - Unity:鼠标点击盒子对撞机
- ansible - 如何解压缩包含多个文件夹的 zip 文件
- c# - 当我将代码实现为统一时,Stackoverflow 递归错误
- objective-c - 没有堆栈跟踪的高山脉上的 SIGSEGV
- php - cakePHP PagesController 安装后找不到
- json - JSON Schema 验证非空正文
- bash - 根据我的操作系统从 s3 下载文件
- .net - 未使用 .Net 从 Google Drive API 接收文件夹
- javascript - 如何向 phpmailer 联系表单添加 ajax/不刷新
- python - 如何合并两个列表而不包括python中两个列表中共有的元素