2015-06-10 6 views
1

Я использовал функцию inotify() в своей программе для контроля/каталога proc. Теперь моя задача - найти, когда процесс станет зомби. Затем мне нужно вывести предупреждение о том, что процесс зомби был найден. На данный момент программа записывает некоторые изменения, но я не знаю, как найти процесс зомби ..Zombie process - Найти его

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/inotify.h> 
#include <limits.h> 

int main() 
{ 
    int inotify_fd, wd; 
    int num; 

    char buffer[sizeof(struct inotify_event)+NAME_MAX+1]; 
    struct inotify_event *dogodek; 

    inotify_fd = inotify_init(); 
    if (inotify_fd==-1) { 
     perror("inotify_init"); 
     return 1; 
    } 


    wd = inotify_add_watch(inotify_fd, "/proc/",IN_ALL_EVENTS); 
    if (wd==-1) {              
     perror("inotify_add_watch"); 
     return 1; 
    } 

    printf("Map gots descriptor %d\n",wd); 

    int f; 
    for (f=0; f<20; f++) { 
     num=read(inotify_fd, &buffer, sizeof(buffer)); 
     if (num>0) { 
      dogodek=(struct inotify_event*)buffer; 

      printf("Access to map with descriptor %d\n", dogodek->wd); 
      if (dogodek->len>0) 
       printf("\tevent found: %s\n", dogodek->name); 
      else 
       printf("\tevent found in directory!\n"); 


      printf("\tMask of the event %x\n", dogodek->mask); 
      if (dogodek->mask & IN_ACCESS) 
       printf("\t\tReading file!\n"); 

      if (dogodek->mask & IN_CREATE) 
       printf("\t\tCreating file!\n"); 

      if (dogodek->mask & IN_DELETE) 
       printf("\t\tDeleting file!\n"); 

      if (dogodek->mask & IN_OPEN) 
       printf("\t\tOpening file!\n"); 




     } 
    } 
    inotify_rm_watch(inotify_fd, wd); 
    return 0; 
} 

мне нужен пример в коде не только explation, если есть возможность.

+0

возможно дубликат [Как проверить, если процесс с PID X является зомби] (http://stackoverflow.com/questions/1619020/how -to-check-if-a-process-with-a-pid-x-is-a-zombie) –

+1

Возможно, есть некоторые сходства, но я испортил код. – sandivratar

ответ

1

Следующая информация относится к Linux (по крайней мере):

  • Статус процесса можно найти в /proc/[pid]/status.

  • Для зомби файл /proc/[pid]/cmdline пуст, то есть с него возвращается 0 байт.

Для получения дополнительной информации см здесь: http://man7.org/linux/man-pages/man5/proc.5.html