网上找了一段代码,有点问题。于是修改了,发出来。
/** 进程名可以不等于执行文件名。 这时要传递另外一个参数。 不考虑进程名是pts这种故意捣乱的情况。 通过ps,检查输出结果是否是进程名。 参考字串如下: 9548 pts/19 00:00:25 gh_main */ int process_check_state(const char* psProcessName) { int state = -1; FILE *fstream=NULL; char buff[1024] = {0}; //用空格,是去掉类似dah_main的噪声 sprintf(buff, "ps -A | grep \" %s\"", psProcessName); if (NULL==(fstream=popen(buff, "r"))) { return -1; } while (NULL != fgets(buff, sizeof(buff), fstream)) { if (strlen(buff) <= 0) { break; } char* psHead = strstr(buff, psProcessName); if (psHead == NULL) { continue; } int pos = strlen(psHead)-1; if (psHead[pos] == '\n') { psHead[pos] = 0; } //GH_LOG_INFO("|||%s|||", psHead); if (!strcmp(psHead, psProcessName)) { state = 0; break; } } } pclose(fstream); return state; }