如何使用perl单独获取linux进程id
当我在命令提示符下执行下面的命令时,它工作正常。但是当我在perl脚本中包含相同的代码时,它显示了整个进程的名称如何使用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
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`;