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

标签 perl

当我在命令提示符下执行以下命令时,它工作正常。但是当我在 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 的 backticks and qx//插入变量,所以当你写:

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

perl 插入 special variable $2 .在您的情况下,$2未设置,因此扩展为空字符串,因此 awk 命令只是 {print} .

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

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

关于perl - 如何使用perl单独获取linux进程ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20077289/

相关文章:

perl - 在 emacs 中调用(缓冲区文件名)时转义空格

string - 从另一个字符串中提取所需的子字符串 -Perl

perl - 如何在 ActiveState Perl 中温和地终止进程?

mysql - 使用 MySQL/Perl DBI 进行异步查询

perl - 更新 Perl 全局变量的正确方法

regex - Perl:无法从文件中获取正确的匹配项

perl - 在 perl 中构建可变深度哈希引用数据结构

regex - BASH:如果行匹配 - 删除行 + 接下来的 33 行

Perl:一次读取一个字节的二进制文件

perl - 直接索引到Perl中返回的数组