是APP1
命令行上的最后一个条目吗?process*
或者,它是命令之后的第二个单词吗?
如果它是该行的最后一个词,您可以使用以下命令:
use strict;
use warnings;
use autodie;
open my $command_output, "|-", "pgrep -fl process";
while ( my $command = < $command_output > ) {
$command =~ /(\w+)$/;
my $app = $1; #The last word on the line...
否则,事情会变得更加棘手。我正在使用pgrep
而不是ps -ef | grep
. 该ps
命令返回一个标题,以及许多字段。您需要拆分它们,并全部解析它们。此外,它甚至会向您显示grep
用于获取您感兴趣的进程的命令。
pgrep
带有-f
和参数的命令-l
不返回标头,只返回进程 ID,后跟完整的命令。这使得使用正则表达式解析变得更加容易。(如果您不了解正则表达式,则需要了解它们。)
open my $command_output, "|-", "pgrep -fl process";
while ( my $command = < $command_output > ) {
if ( not $process =~ /^\d+\s+process\w+\s+(\w+)/ ) {
next;
}
my $app = $1; #The second word in the returned command...
没有必要分裂或混乱。没有要跳过的标题 正则表达式匹配数字进程 ID、process
命令,然后选择第二个单词。我什至检查以确保输出pgrep
符合我的预期。否则,我会得到下一行。