- 你在使用
use warnings;
和use strict;
吗?
- 使用
pgrep
而不是ps
呢?
- 如果
$return
返回多于一行会怎样?
如果您的子程序只是检查进程是否正在运行并且您在另一个循环中使用它,您的程序会更好地运行。
在这里,我的检查进程子例程返回它找到的所有进程的列表。我可以在我的循环中使用它来查看进程本身是否已停止。我本来可以用来qx()
获取进程列表,然后split
用来创建进程列表。
use warnings;
use strict;
use feature qw(say);
use constant {
PROCESS => "MInstaller",
SLEEP => 5,
};
while ( process_check( PROCESS ) ) {
say qq(Process ) . PROCESS . qq( is running...);
sleep SLEEP;;
}
say qq(Process ) . PROCESS . qq( has ended.);
sub process_check {
my $process = shift;
open ( my $process_fh, "-|", "pgrep $process" );
my @process_list;
while ( my $line = <$process_fh> ) {
chomp $line;
push @process_list, $line;
}
close $process_fh;
return @process_list;
}