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

Leo*_*Leo 3 perl

当我在命令提示符下执行以下命令时,它工作正常.但是当我在perl脚本中包含相同内容时,它会显示整个进程名称.

ps -ef | grep truecontrol | awk '{print$2}'
Run Code Online (Sandbox Code Playgroud)

回报

4567
3456
Run Code Online (Sandbox Code Playgroud)

当我通过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
Run Code Online (Sandbox Code Playgroud)

pil*_*row 7

perl的反引号和qx //插入变量,所以当你写:

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

perl插入特殊变量$2.在你的情况下,$2没有设置,因此扩展为空字符串,所以awk命令是简单的{print}.

你可以逃避美元符号(`ps ... | awk '{print \$2}'`)以避免这种情况.

(顺便说一句,我建议grep [t]ruecontrol阻止grep匹配它自己的进程表条目,或者它的构成管道的父shell的条目. 具有POSIX弯曲的sh aficionados可能另外建议`ps -eo pid,comm,args | awk '/[t]ruecontrol/{print \$1}'`.)


jks*_*hah 5

尝试使用 pgrep

my $process_chk_command = `pgrep truecontrol`;
Run Code Online (Sandbox Code Playgroud)