我正在运行一个perl脚本,它执行逻辑检查,并且如果满足某些条件。示例:如果超过了一定的时间长度,我想在运行另一个更新该数据的脚本的linux服务器上运行system()命令。更新文件的脚本需要10-15秒,并且必须经过当前文件数量,但在该月份的高峰时段可能长达30秒。Perl调用系统命令并同时保持脚本运行
我想让perl脚本运行,如果它必须运行system()命令,我不希望它在完成脚本的其余部分之前等待system()完成。什么是最好的方式去做这件事?
谢谢
我正在运行一个perl脚本,它执行逻辑检查,并且如果满足某些条件。示例:如果超过了一定的时间长度,我想在运行另一个更新该数据的脚本的linux服务器上运行system()命令。更新文件的脚本需要10-15秒,并且必须经过当前文件数量,但在该月份的高峰时段可能长达30秒。Perl调用系统命令并同时保持脚本运行
我想让perl脚本运行,如果它必须运行system()命令,我不希望它在完成脚本的其余部分之前等待system()完成。什么是最好的方式去做这件事?
谢谢
系统运行在shell命令,所以你可以使用所有的外壳功能,包括作业控制。因此,只要在你的命令的末尾这样坚持&:
system "sleep 30 &";
由于发表日期,不打算是双关语,但要小心僵尸! 这有点棘手,详情请参阅perlipc。 但是,据我了解您的问题,您不需要维护更新程序和调用程序进程之间的任何关系。在这种情况下,更容易只是“射后不理”:
use strict;
use warnings qw(all);
use POSIX;
# fork child
unless (fork) {
# create a new session
POSIX::setsid();
# fork grandchild
unless (fork) {
# close standard descriptors
open STDIN, '<', '/dev/null';
open STDOUT, '>', '/dev/null';
open STDERR, '>', '/dev/null';
# run another process
exec qw(sleep 10);
}
# terminate child
exit;
}
在这个例子中,sleep 10
不属于进程的组了,所以甚至杀害父进程将不会影响孩子。
运行在Perl外部程序(包括运行后台进程),能否请您包括您到目前为止所做的事,一些示例代码,一个很好的教程?在给定的问题上提供尽可能多的信息是有帮助的,另外它还向其他人证明在问问题之前您已经做了一些尽职调查。 – slm