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

来源:互联网 发布:mac怎么下载穿越火线 编辑:程序博客网 时间:2024/06/04 22:23

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


0 0
原创粉丝点击