是Dameon进程在RAM中占用内存,如果Daemons进程的数量是如何INIT是所有守护进程的父进程

时间:2015-11-24 14:30:16

标签: c linux unix operating-system signals

#include <stdio.h>
#include <signal.h>
void my_isr(int n)
{
        printf("in isr pid=%d ppid=%d signal#=%d\n",getpid(),getppid(),n);
}
main()
{
        printf("hello  %d and bash id : %d\n",getpid(),getppid());
        signal(SIGHUP,my_isr);
        while(1);
}
achul@achul:~/chennai/linux/lan/sm_assignment$ ./a.out 
hello  4220 and bash id : 4150

achul@achul:~/chennai/linux/lan/sm_assignment$ ps -el | grep 4220
0 R  1000  4220     1 63  80   0 -   501 -      ?        00:01:22 a.out

这里首先我发送SIGHUP像bash“kill -1 4150”,所以在那里无论进程是什么,都接收SIGHUP ..好吧,现在进程4220没有任何PTS(控制终端)。我怀疑是守护进程的数量是否存在,它显示所有的父进程为INIT(1),那么INIT如何管理并且不会浪费RAM中不必要的内存?

1 个答案:

答案 0 :(得分:1)

几乎不清楚。但(大致):

  • 当你杀死shell时,你正在杀死一个会话领导者进程,这通常会杀死它的所有孩子。如果这会创建孤立的进程,则它们将由init采用。
  • init的一个任务是wait()终止其子女(是否采用),这样可以正确清理流程表,避免僵尸。
  • 当进程终止时,它的所有地址空间都被释放(并且每个ressource都是),所以它不再使用任何内存,除了内核进程表中的少量字节(仅在僵尸状态下)。