Я пишу код C ++ в моем проекте, который должен сказать, работает ли мой сервер Websphere MQ или нет. Чтобы извлечь это, нам нужно запустить «/ opt / mqm / bin / amq status», чтобы показать, работает ли он или нет. Сложная вещь — MQHOME = / opt / mqm не постоянна на платформах Unix. Итак, мы согласились проект для извлечения пути MQHOME из абсолютного пути процесса «amqzlaar0», который является процессом сервера mq. Итак, нам нужно выполнить команду ниже, которая показывает процесс «amqzlaar0» вместе с его полным путём. Затем мы будем хранить строка в массиве для извлечения MQHOME.
"ps -ef | grep amqzlaar0 | awk '{print $(NF-1)}' "
Функция system () не работает с кодом выхода -1, когда я использую символ канала «|». Но если я выдаю только system («ps -ef»), это работает.
Пожалуйста, помогите мне, как выполнить команду, разделенную на трубу, используя систему.
Ваша помощь очень ценится.
С Уважением,
Sriram
Я считаю, что вы не должны запускать команду, чтобы проверить, что amqzlaar0
работает, но запросить Proc (5) файловая система (в Linux).
Заметить, что /proc/
не является переносимым (например, не стандартизировано в Posix). Некоторые Unix-ы не имеют его, а Solaris и Linux имеют очень разные /proc/
файловые системы.
Если вы действительно хотите выполнить команду, используйте, например, snprintf (3) построить команду (или std::string
или же std::ostringstream
) затем используйте POPEN (3) (а также pclose
) запустить команду
Читать Расширенное программирование в Linux чтобы получить лучшее представление о программировании Linux. Смотрите также Системные вызовы (2)
Кстати, некоторые люди могли бы использовать псевдонимы, например, grep
(возможно, в их .bashrc
), так что вы, вероятно, должны указать полные пути в вашей команде (так /bin/grep
не grep
так далее…).
Просто беги ps -Ef
, Вы программист на C ++. Эквивалент grep
а также awk
не сложно в C ++, и быстрее в C ++ (не требует двух дополнительных процессов)