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

 

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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值