系统相关
首页 > 系统相关> > 浅谈僵尸进程

浅谈僵尸进程

作者:互联网

1.linux系统进程都是怎么生成的

进程运行时,shell命令行接收到了指令,进而调用fork函数来创建一个进程。

2.僵尸进程是怎么产生的

当子进程退出时,父进程没有调用wait函数或者waitpid()函数等待子进程结束,又没有显式忽略SIGCHLD信号,那么它将一直保持在僵尸状态,如果这时父进程结束了,init进程会自动接收这个子进程,为它收尸,但如果父进程是一个循环,不会结束,那么子进程就会一直保持僵死状态。
进程状态:

3.僵尸进程会造成内存泄露吗,应该怎么处置僵尸进程

如果父进程是一个循环,子进程无人接收,会造成一部分内存浪费。
此时可以杀死僵尸进程的父进程,让init进程自动回收这个僵尸进程。

4.僵尸进程在内存中还存在吗?

僵尸进程的状态:
一个进程在调用exit()函数结束时,并没有真正的被销毁,而是留下一个称为僵尸进程的数据结构,僵尸进程放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保持一个位置,记载该进程的退出状态等信息。

5.怎样避免僵尸进程

6.wait函数和waitpid函数

头文件:

#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);

wait函数会暂时停止目前进程的执行,直到有信号来到或者子进程结束。
如果在调用wait函数时,子进程已经结束,则会立即用status返回子进程状态值,返回值则是子进程的进程识别码,如果不需要子进程状态值,则status入参可为NULL;

pid_t waitpid(pid_t pid, int *status, int options);

参数说明:
pid 欲等待的子进程识别码,值说明如下:

options 有以下几种值:

标签:函数,浅谈,僵尸,pid,识别码,进程,wait
来源: https://blog.51cto.com/u_14438799/2887138