如何使用perl单独获取linux进程id

如何使用perl单独获取linux进程id,perl,Perl,当我在命令提示符下执行下面的命令时,它工作正常。但是当我在perl脚本中包含相同的代码时,它显示了整个进程的名称 ps -ef | grep truecontrol | awk '{print$2}' 返回 4567 3456 当我通过perl执行它时,它显示了整个过程的细节。我想把它分配给一个变量数组并处理它。让我知道怎么做 my $process_chk_command = `ps -ef | grep truecontrol | awk '{print$2}'`; print($pro

当我在命令提示符下执行下面的命令时,它工作正常。但是当我在perl脚本中包含相同的代码时,它显示了整个进程的名称

ps -ef | grep truecontrol | awk '{print$2}'
返回

4567
3456
当我通过perl执行它时,它显示了整个过程的细节。我想把它分配给一个变量数组并处理它。让我知道怎么做

my $process_chk_command = `ps -ef | grep truecontrol | awk '{print$2}'`;
print($process_chk_command);


root      9902  9890  0 05:50 ?        00:00:03 /opt/abc/jre/bin/java -DTCFTP=1 -d64 -Xms16m -Xmx64m -Djava.library.path=/opt/abc/server/ext/wrapper/lib -cla

另外,有一个perl实用程序可以将awk脚本转换为perl:

符合perl的座右铭,另一种方式:

my $pcc=`killall -s truecontrol`;
my (undef,undef,$pid)=split(' ',$pcc);
print $pid;
perl的插值变量,因此在编写时:

my $process_chk_command = `ps -ef | grep truecontrol | awk '{print $2}'`;
perl插值函数。在您的例子中,
$2
未设置,因此扩展为空字符串,因此awk命令只是
{print}

您可以避开美元符号(
`ps…|awk'{print\$2}`
)来避免这种情况


(顺便说一句,我建议
grep[t]ruecontrol
防止grep匹配其自己的进程表条目,或与构建管道的父shell的进程表条目相匹配。有POSIX倾向的sh爱好者可能会另外建议
`ps-eo-pid,comm,args | awk'/[t]ruecontrol/{print\$1}`

尝试使用
pgrep

my $process_chk_command = `pgrep truecontrol`;
当然,编写它的方法是
ps-ef | awk'/truecontrol/{print$2}'
,或者运行
ps-ef
并用Perl进行过滤。
my $process_chk_command = `pgrep truecontrol`;