您的位置:首页 > 运维架构 > Linux

Linux下C语言实现查看进程是否存在

2012-02-21 11:21 423 查看
基本思路是先定义一个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);

}

示例二

这个麻烦一点,从ps的返回结果获取PID,再用kill查看是否存在

http://hi.baidu.com/backylee/blog/item/de366ca8d843cabdcb130c9b.html

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <signal.h>

int main()

{

FILE *pstr;

char cmd[128],buff[512];

pid_t pID;

int pidnum;

char *name= "Test";/*进程名*/

char *p = NULL;

int ret=3;

memset(cmd,0,sizeof(cmd));

sprintf(cmd, "ps -ef|grep %s",name);

pstr=popen(cmd, "r");

if(pstr==NULL)

{ return 1; }

memset(buff,0,sizeof(buff));

fgets(buff,512,pstr);

printf("%s\n",buff);

p=strtok(buff, " ");

p=strtok(NULL, " ");

pclose(pstr); //这句是否去掉,取决于当前系统中ps后,进程ID号是否是第一个字段

if(p==NULL)

{ return 1; }

//printf( "pid:%s\n",p);

if(strlen(p)==0)

{ return 1; }

if((pidnum=atoi(p))==0)

{ return 1; }

printf("pidnum: %d\n",pidnum);

pID=(pid_t)pidnum;

ret=kill(pID,0);

printf("ret= %d \n",ret);

if(0==ret)

printf("process: %s exist!\n",name);

else

printf("process: %s not exist!\n",name);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: