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

来源:互联网 发布:苹果网络锁查询 编辑:程序博客网 时间:2024/06/05 00:12
 

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

分类: Linux 987人阅读 评论(0) 收藏 举报

基本思路是先定义一个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;
}