2019-11-07 |

什么是孤儿进程?什么是僵尸进程?

A
B
C
D
答案:
  • 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程,将被init进程(进程号为1)所收养,并由init进程对这些子进程完成状态收集工作;

  • 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并未调用waitwaitpid来获取子进程的状态信息,子进程的进程描述符仍然保存在系统中,那么这种子进程将成为僵尸进程。

    僵尸进程的危害:在子进程退出的时候,内核释放该子进程所有的资源,但仍保留进程号、退出状态、运行时间等信息,直到父进程通过waitwaitpid对其进行释放;但如果父进程不对保留信息进行释放,进程号会一直被占用,然而系统所能使用的进程号是有限的,如果产生大量的僵尸进程,系统将因没有可用的进程号而导致系统不能产生新的进程。


解决僵尸进程的方法:

  • 父进程通过waitwaitpid等函数等待子进程结束,但这样会导致父进程挂起;
  • 如果父进程很忙,那么可用signal函数为SIGCHLD安装handler,这样当子进程结束后,父进程会收到信号,在handler中调用wait回收;
  • 如果父进程不关心子进程何时结束,那么可以用signal(SIGCHLD, SIG_IGN)通知内核,这样当子进程结束后,内核会对其进行回收;
  • fork两次,父进程fork一个子进程后继续工作,子进程fork一个孙进程后退出,那么孙进程将被init接管,这样当子进程结束后,内核会对其进行回收。
解释:

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论