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

时间:2014-08-12 18:44:11

标签: c++ awk ps

我正在我的项目中编写一个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命令。

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

2 个答案:

答案 0 :(得分:2)

我相信您不应该运行命令来检查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等等。)

答案 1 :(得分:1)

只需运行ps -Ef。您是C ++程序员。相当于grepawk在C ++中并不难,而且它在C ++中更快(不需要两个额外的过程)