linux下qt检查进程是否存在,Linux下C语言实现查看进程是否存在

基本思路是先定义一个FILE指针,用该指针接收popen()执行ps指令的返回值,再从指针中读取数据到缓存,根据得到的数据判断进程是否存在,怎么操作要看ps的参数了。

示例一

下面这个示例从网上找的,根据个数来判断进程是否存在

#include

#include

#include

#include

#include

#include

#include

#define BUFSZ PIPE_BUF

void err_quit(char *msg)

{

perror(msg);

exit(EXIT_FAILURE);

}

int main(int argc, char *argv[])

{

FILE* fp;

int count;

char buf[BUFSZ];

char command[150];

if(argc != 2)

{

printf("USAGE: example \n");

exit(EXIT_SUCCESS);

}

else

sprintf(command, "ps -C %s|wc -l", argv[1] );

if((fp = popen(command,"r")) == NULL)

err_quit("popen");

if( (fgets(buf,BUFSZ,fp))!= NULL )

{

count = atoi(buf);

if((count - 1) == 0)

printf("%s not found\n",argv[1]);

else

printf("process : %s total is %d\n",argv[1],(count - 1));

}

pclose(fp);

exit(EXIT_SUCCESS);

}

示例二

int detect_process(char * process_name)

{

FILE *ptr;

char buff[512];

char ps[128];

sprintf(ps,"ps -e | grep -c ' %s

",process_name);

strcpy(buff,"ABNORMAL");

if((ptr=popen(ps, "r")) != NULL)

{

while (fgets(buff, 512, ptr) != NULL)

{

if(atoi(buff)>=2)

{

pclose(ptr);

return CONFLICT;

}

}

}

if(strcmp(buff,"ABNORMAL")==0) /*ps command error*/

return ERROR;

pclose(ptr);

return NOERROR;

}