gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:25:36 26 4
gpt4 key购买 nike

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

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

当我使用管道符号“|”时,system() 函数失败,退出代码为 -1。但是,如果我只发出 system("ps -ef"),它就会起作用。

请帮助我了解如何使用系统执行管道分隔的命令。

非常感谢您的帮助。问候,斯里拉姆

最佳答案

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

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

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

阅读Advanced Linux Programming更好地了解 Linux 编程。另见 syscalls(2)

顺便说一句,有些人可能使用别名,例如grep(可能在他们的 .bashrc 中),因此您可能应该在命令中放入完整路径(所以 /bin/grep 而不是 grep 等...)。

关于c++ - 需要在C++中执行 "ps -ef | grep amq | awk ' {print $(NF-1) }' "命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com