shell - perl中超时的实现
问题描述
child_script.pl
在下面的 perl 脚本中,如果脚本的执行超过 1 小时,我打算超时。但是,由于脚本在指定的时间限制后仍在运行,因此逻辑似乎不起作用。
任何猜测我在这里做错了什么?
我指的是在 perl 中实现超时的以下文档: https ://docstore.mik.ua/orelly/perl4/cook/ch16_22.htm
它适用于独立命令。该system
命令可能有问题吗?
MY_CODE ( parent_script.pl
)
#!/usr/bin/perl
my $sys_cmd = " perl child_script.pl 2>&1 | tee logfile.txt \n";
print "INFO: Enter alarm..\n";
eval {
local $SIG{ALRM} = sub { die "alarm clock restart" };
alarm 3600; # schedule alarm in 1 hours
eval {
print "INFO: Run script.. \n";
system ($sys_cmd);
};
alarm 0; # cancel the alarm
};
alarm 0; # race condition protection
die if $@ && $@ !~ /alarm clock restart/; # reraise
print "INFO: Exit alarm..\n";
解决方案
您不会使已启动的脚本超时;您为当前(父)脚本设置警报。您将不得不system
从您的警报中杀死子进程(您已经开始使用的那个) - sub
。
编辑:
如果你有/usr/bin/timeout
(如果你在 Linux 上运行就是这种情况),使用这个命令来处理超时可能会更方便,而不是在 Perl 中重新实现逻辑。
推荐阅读
- linux - 内联输入中条件的 shell/ksh 语法
- javascript - 预格式化文本中关键字的工具提示
- shell - emacs shell 无法处理 % 字符
- c++ - 使用模板函数返回数组的大小
- python - Mongoose Schemas 和通过 python 插入
- javascript - 使用 LocalStorage 键调用对象值
- ruby - 如何循环遍历Ruby中相互对应的多个数组
- python - 如何使模拟对象的任意嵌套属性/方法在 Python 中返回特定值?
- python-3.x - 将字符串转换为浮点数,四舍五入到小数点后一位
- javascript - 转换函数和光标:指针不起作用