LINUX下用C判断一个进程是否活着

  网上找了一段代码,有点问题。于是修改了,发出来。


/**
 进程名可以不等于执行文件名。
 这时要传递另外一个参数。
不考虑进程名是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;
}

 

你可能感兴趣的:(Linux/Shell,C/C++)