perl 如何判断所有子进程都执行完毕后,做首尾工作。

perl 如何判断所有子进程都执行完毕后,做首尾工作。,第1张

给两个思路,第一个就是每个生成的子进程的pid都保存在主进程里面,例如保存在数组里。

然后,在load数据之前,用kill函数将0号信号发送给每个子进程斗穗。kill函数的0号信号不会发送真正的信号,只是测试能否向某个进程发送信号。这样,如果每个子进程都已经退出,那么对每个子进程进行kill 0都会得到假值,这样就可以load你的数据了。

第二个是思路是,设置一斗旅个全局变量,CHLD信号收割子进程时,每捕获一次便将全局变量加1。这时主进程就只要记录生成的子进程的个数,这样在load时判断全局变量与子进程的个数是否相等,若相等就代表子进程已经退出完毕了。当然,这种方法不会很保险,有可能两个或以上的子进程同时被收割,但全局变量只加了1,这样就会造成全局变量与子进程数空销卜永远都不相等而造成程序无限挂起……

一般来说,如果perl调用Linux 命拍搏令而使用system命令,可通过检查其返回值来确认是否执行完毕。

#!/usr/bin/perl -w

use strict

my $command = "date"

$iSysRet = system("$command")

if ($iSysRet != 0){

    print "Command $command 盯手execute failed!\n"

}

# 如果perl 调用子程序,可以在子程序里设置返回值给主程序,然后凯贺嫌判断返回值来确定是否运行完毕。

mori]",);

上档烂知面的最后部分应该改为:mori]")

最后的,可以去掉,另外最后的行消;你用的是全角的

最后执行历散完的记录会写入lastami.txt这个文件里。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12394864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存