qt中封裝了相關的方法, 但是因為我的命令中用到了管道命令, 出現了非預期結果, 所有改用了linux系統原生的方法。
下邊是一個判斷某進程是否存在的例子。
當前存在一個問題,當linux返回多行時, 程序只能讀取返回值的第一行。目前我的 解決方法是,將linux命令的輸出重定向到一個文件,然后程序再去讀這個文件。
#include <stdlib.h> bool IsProcessOn() { string check_command = " ps -ef | grep -w process_name | grep -v grep | wc -l "; char return_value[150]; int count = 0; FILE* ptr = NULL; if((ptr = popen(check_command.c_str(), "r")) == NULL) { return false; } memset(return_value, 0, sizeof(return_value)); if((fgets(return_value, sizeof(return_value),ptr))!= NULL) { count = atoi(return_value); } pclose(ptr); if(count <= 0) { return false; } return true; }