需要C++执行"ps -ef | grep amq | awk '{print $(NF-1)}' "命令

Need to execute "ps -ef | grep amq | awk '{print $(NF-1)}' " command in C++

本文关键字:NF-1 print 命令 C++ grep -ef amq awk 执行 需要 ps      更新时间:2023-10-16

我正在我的项目中编写一个 c++ 代码,它应该告诉我的 websphere mq 服务器是否正在运行。为了提取,我们需要运行"/opt/mqm/bin/amq status"来显示它是否正在运行。棘手的是MQHOME=/opt/mqm在Unix平台上不是恒定的。因此,我们同意设计从进程"amqzlaar0"(mq服务器进程(的绝对路径中提取MQHOME路径。因此,我们需要发出以下命令,显示进程"amqzlaar0"及其完整路径。然后,我们将字符串存储在数组中以提取 MQHOME。

"ps -ef | grep amqzlaar0 | awk '{print $(NF-1)}' " 

system(( 函数失败,退出代码 -1 当我使用管道符号"|"时。但是,如果我只发布系统("ps -ef"(,它可以工作。

请帮助我如何使用系统执行管道分离命令。

非常感谢

您的帮助。问候斯里拉姆

我认为您不应该运行命令来检查amqzlaar0是否正在运行,而应该查询 proc(5( 文件系统 (在 Linux 上(。

请注意,/proc/ 不是可移植的(例如,在 Posix 中没有标准化(。有些Unix没有它,Solaris和Linux的/proc/文件系统非常不同。

如果真的想运行一个命令,使用 snprintf(3( 来构建命令(或std::stringstd::ostringstream(,然后使用 popen(3( (和pclose(来运行命令

阅读高级 Linux 编程以更好地了解 Linux 编程。另请参阅系统调用(2(

顺便说一句,有些人可能已经别名,例如 grep(也许在他们的.bashrc中(,所以你可能应该在你的命令中放置完整的路径(这样/bin/grep就不会grep等等......

只需运行ps -Ef .你是一个C++程序员。 相当于grepawk在C++中并不难,在C++中速度更快(不需要两个额外的过程(