僵尸进程 - 找到它

时间:2015-06-10 08:52:35

标签: c ubuntu

我在我的程序中使用了inotify()函数来监视/ proc目录。现在我的工作是找到一个过程变成僵尸的时候。然后我需要输出一个警告,发现僵尸进程。目前程序正在记录一些变化,但我不知道如何找到僵尸进程..

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

如果有可能,我需要代码中的示例而不仅仅是解释。

1 个答案:

答案 0 :(得分:1)

以下内容适用于Linux(至少):

  • 可以在/proc/[pid]/status

  • 中找到流程的状态
  • 对于僵尸,文件/proc/[pid]/cmdline为空,即从中读取返回0个字节。

有关详情,请参阅此处:http://man7.org/linux/man-pages/man5/proc.5.html