Поскольку функция std::system(const char* command)
из cstdlib
не гарантирует, что вернет правильный статус возврата из оболочки , то как я могу запустить команду в оболочке с помощью c / c ++ и получить гарантия, что даст мне правильное возвращаемое значение?
В моем случае, например, я выполнил команду с:
bool is_process_running(std::string p_name){
std::string command_str= "ps aux | grep '" + p_name + "' | egrep -v '(grep|bash)'";
int result(0);
result= system(command_str.c_str());
return result == 0;
}
Если я, например, запускаю ps aux | grep 'my_process' | egrep -v '(grep|bash)'
непосредственно в терминал и после этого echo $?
, я вижу, что он возвращает 0
, потому что my_process
работает и также возвращает 1
, когда я использую не запущенный процесс , Но приведенный выше код возвращает другое значение. Этот код работал, когда я тестировал в CentOs 6, но сейчас в CentOs 7 больше не работает. Итак, что я могу использовать для запуска команды оболочки и получения правильного результата?
Я также нашел решение с помощью команды pidof
, но не могу использовать это, потому что pidof не учитывает параметры, переданные в my_process
, которые мне нужны, так как у меня много экземпляров этого процесса, каждый из которых имеет разные аргументы.