如何在Perl中终止带有警报的系统命令?

我在 Windows上运行以下代码片段.从客户端读取后,服务器开始连续监听.我希望在一段时间后终止此​​命令.

如果我在main.pl中使用alarm()函数调用,那么它会终止整个Perl程序(这里是main.pl),所以我通过将它放在一个单独的Perl文件中来调用这个system命令
并使用system命令在原始Perl文件调用此Perl文件(alarm.pl).

但是通过这种方式,我无法在原始Perl文件或被调用的Perl文件调用此system()的输出.

请问任何人请让我知道终止系统()调用的方式或以我上面使用的方式获取输出

main.pl

my @output = system("alarm.pl");
print"one iperf completed\n";

open FILE,">display.txt" or die $!; 
print FILE @output_1; 
close FILE;

alarm.pl

alarm 30;
my @output_1 = readpipe("adb shell cd /data/app; ./iperf -u -s -p 5001");

open FILE,">display.txt" or die $!; 
print FILE @output_1; 
close FILE;

在这两种方式中,display.txt始终为空.

解决方法

这里有几个单独的问题.

首先,为了防止alarm杀死你的脚本,你需要处理ALRM信号.请参阅alarm文档.你不应该需要两个脚本.

其次,system不捕获输出.如果你想这样做,你需要一个反引号变体或管道. Stackoverflow上已经有了答案.

第三,如果alarm.pl将任何内容放入display.txt中,则在写入模式下重新打开文件时,会在main.pl中将其丢弃.您只需要在一个地方创建文件.当你摆脱额外的脚本,你不会有这个问题.

我最近遇到了一些警报和系统问题,但switching to IPC::System::Simple修正了这个问题.

祝好运,:)

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...