c语言关闭程序进程,请问如何用C语言编写查找并杀死僵死进程的程序?在线等。。。。...

如题,系统redhat9

|

A example is listed as below:

#include

#include

#include

#include

#include

// kill all zombie processes

int main ()

{

DIR *pdir = NULL;

struct dirent *pde = NULL;

FILE *pf = NULL;

char buff[128];

char buff2[128];

char *pstr = NULL;

int pid, ppid;

int n;

pdir = opendir("/proc");

if (!pdir)

{

perror("open /proc fail.n");

return -1;

}

while ((pde = readdir(pdir)))

{

if ((pde->d_name[0] d_name[0] > '9'))

{

continue;

}

sprintf(buff, "/proc/%s/status", pde->d_name);

pf = fopen(buff, "r");

if (pf)

{

n = fread(buff, 1, 127, pf);

close(pf);

buff[n] = 0;

pstr = strstr(buff, "(zombie)");

if (pstr)

{

pid = atoi(pde->d_name);

kill(pid, SIGSTOP);

}

}

}

closedir(pdir);

return 0;

}

|

僵死进程是因为其父进程没有回收子进程的资源

只要在其父进程里加入回收子进程资源的程序就可以了

定义如下函数

/**

*      当有子进程死时,主进程所做的操作,在进程数组中把相应的进程号置0

*/

static  void    sig_child(int signo)

{

pid_t   pid;

int             stat,ii;

while((pid=waitpid(-1,&stat,WNOHANG))>0);

return;

}

在主进程开始时加入下面一个语句,用语捕获子进程死的信号

signal(SIGCHLD,sig_child);

|

要想清除其他进程的僵死进程,只有把那个产生僵死进程的进程砍了!

这个是属于编程上的问题,程序处理好的话,是不会有僵死进程的。

|

用ps列出没有父进程的进程然后用kill杀死他。

|

up

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值