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

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


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值