基本思路是先定义一个FILE指针,用该指针接收popen()执行ps指令的返回值,再从指针中读取数据到缓存,根据得到的数据判断进程是否存在,怎么操作要看ps的参数了。
示例一
下面这个示例从网上找的,根据个数来判断进程是否存在
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=program&Number=543154&fpart=all
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<limits.h>
#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 <process name>\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</p>",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;
}