posts - 5, comments - 14, trackbacks - 0, articles - 11

linux进程监控

Posted on 2007-02-12 16:30 东舟 阅读(1309) 评论(4)  编辑  收藏 所属分类: Linux

 


#include 
< sys / wait.h >
#include 
< sys / types.h >
#include 
< unistd.h >
#include 
< errno.h >
#include 
< stdarg.h >
#include 
< stdio.h >
#include 
< string.h >

int  startprocess( char *  path[], char *  name[], int  pid[ 3 ]);
int  watchprocess( int  ppid);
int  rebootpocess( char *  path[], char *  name[], int  ppid, int  num);
int  main( int  argc,  char   * argv[],  char   * envp[]) {
 
  
  
char *  path[ 3 ];
   path[
0 =   " /home/tony/testmysql/source/mysqlDB/test " ;
   path[
1 =   " /home/tony/testmysql/source/mysqlDB/test1 " ;
   path[
2 =   " /home/tony/testmysql/source/mysqlDB/test2 " ;
   
char *  name[ 3 ];
   name[
0 ] = " test " ;
   name[
1 ] = " test1 " ;
   name[
2 ] = " test2 " ;
 
   
int  pid[ 3 ]; int  ppid;
   
   
   startprocess(path,name,pid);
   
// printf("%d\n",pid[0]);
   
   
for (;;) {
    
int  j;
    
for (j = 0 ;j < 3 ;j ++ ) {
     
if (watchprocess(pid[j]) < 0 )
        rebootpocess(path,name,pid[j],j);
    }

    sleep(
30 );
   }

   
  
// if(watchprocess(3025)<0)
      
//  rebootpocess(path,name,5317,2);
   return   0 ;
}

int  startprocess( char *  path[], char *  name[], int  pid[ 3 ]) {
 
 
int  i = 0 ;
 
for (i = 0 ;i < 3 ;i ++ ) {
   
int  fd;
   fd
= fork();
   
if (fd < 0 )
      
{
       
return   - 1
      }

      
if (fd == 0 )
         
{
          execl(path[i],name[i],(
char   *  ) 0 );
          exit(
0 );
         }

      
else
       
{  
            pid[i]
= fd;
          
continue ;
       }

  }
 
  
  
  
return   0 ;
}

int  watchprocess( int  ppid) {
 
  printf(
" ======watchprocess========\n " );
  printf(
" %d\n " ,ppid);
 
  
char *  filename = ( char   * )malloc( 100 );
  sprintf(filename,
" /proc/%d/status " ,ppid);
  FILE 
*  pFile;
  
char   *  line  =  NULL;
   size_t len 
=   0 ;
   ssize_t read;
   pFile 
=  fopen (filename, " r " );
   
if  (pFile == NULL)  {
    printf(
" %s\n " " Config file is not exist!\n " );
    
return   - 1 ;
   }

   
int  linenum = 0 ;
   
char   *  tmp;
   
// char* tmp1 = (char*)malloc(20);
    while  ((read  =  getline( & line,  & len, pFile))  !=   - 1   &&  linenum  <   3 {
       linenum
++ ;     
       strtok(line, 
" \t " );
       tmp 
=  strtok(NULL, "   " );
       
if ( linenum  ==   2   &&  ((strcmp(tmp, " S " ) == 0 || (strcmp(tmp, " R " ) == 0 )) ) {
          
// printf("sdfsdlfw2rwW$#@^$%&YERGHFDGDFGERYG\n");
          fclose(pFile);
          pFile 
=  NULL;
          
return   0 ;
        }
     
   }

   free(filename);
   fclose(pFile);
   pFile 
=  NULL; 
  
return   - 1 ;
 }

int  rebootpocess( char *  path[], char *  name[], int  ppid, int  num) {
 
 printf(
" ======rebootpocess========\n " );
 printf(
" %d\n " ,num);
 
if (kill(ppid,SIGKILL) == 0 )
    
{   
    
int  fd;   
         fd
= fork();
       
if (fd == 0 )
           
{     
            execl(path[num],name[num],NULL);
            exit(
0 );
              }

       
else
         
{
      
return   0 ;
      }

     }

   
else
     
{
      printf(
" Kill the process failed! " );
     
return   - 1
    }

 
 
return   0 ;
 }

Feedback

# re: linux进程监控[未登录]  回复  更多评论   

2007-12-09 15:15 by zhan
我很想知道你这个进程监控程序大概的思路,尤其是他是怎么样对我想监控的进程进行监控的,是怎样判断的是不是那个进程。谢谢!!
我的邮箱:zhanshicai8139@163.com

# 可以告诉我你的思路吗?  回复  更多评论   

2008-03-05 13:49 by jiangminjie
我的邮箱是:jiangminjie2008@hotmail.com

# re: linux进程监控[未登录]  回复  更多评论   

2012-08-07 21:05 by jiang
我的邮箱:jlyh225@163.com
我也想知道你的思路

# re: linux进程监控  回复  更多评论   

2012-10-12 17:24 by avrtercel
你好,最近在学习进程监控这一块,想请教博主的这段程序的进程监控的原理,我的邮箱avrtercel@163.com,辛苦了!谢谢!

只有注册用户登录后才能发表评论。


网站导航: