我正在我的项目中编写一个c ++代码,该代码应该告诉我的websphere mq服务器是否正在运行。为了提取我们需要运行“/ opt / mqm / bin / amq status”来显示它是否正在运行。棘手的事情是MQHOME = / opt / mqm在unix平台上不是恒定的。所以,我们同意一个设计从进程“amqzlaar0”的绝对路径中提取MQHOME路径,这是一个mq服务器进程。所以,我们需要发出以下命令,显示进程“amqzlaar0”及其fullpath。然后,我们将存储数组中用于提取MQHOME的字符串。
"ps -ef | grep amqzlaar0 | awk '{print $(NF-1)}' "
当我使用管道符号“|”时,system()函数失败,退出代码为-1。但是,如果我只发出系统(“ps -ef”),它就可以了。
请帮我讲解如何使用system执行pipe seperated命令。
非常感谢您的帮助。 问候, 斯利拉姆
答案 0 :(得分:2)
我相信您不应该运行命令来检查amqzlaar0
是否正在运行,而是查询proc(5)文件系统(在Linux上)。
请注意,/proc/
不可移植(例如,在Posix中未标准化)。有些Unix没有它,Solaris和Linux有非常不同的/proc/
文件系统。
如果确实想要运行命令,请使用例如snprintf(3)构建命令(或std::string
或std::ostringstream
),然后使用popen(3)(和pclose
)运行命令
阅读Advanced Linux Programming以更好地了解Linux编程。另请参阅syscalls(2)
顺便说一句,有些人可能有别名,例如grep
(也许在他们的.bashrc
中),因此您可能应该在命令中添加完整路径(因此/bin/grep
而不是grep
等等。)
答案 1 :(得分:1)
只需运行ps -Ef
。您是C ++程序员。相当于grep
和awk
在C ++中并不难,而且它在C ++中更快(不需要两个额外的过程)