我在我的程序中使用了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;
}
如果有可能,我需要代码中的示例而不仅仅是解释。
答案 0 :(得分:1)
以下内容适用于Linux(至少):
可以在/proc/[pid]/status
。
对于僵尸,文件/proc/[pid]/cmdline
为空,即从中读取返回0
个字节。