#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 中浪费不必要的内存?
最佳答案
几乎不清楚。但是(大致):
- 当您终止 shell 时,您正在终止一个 session 领导进程,而这通常会终止它的所有子进程。如果这创建了孤立进程,它们将被 init 采用。
- init 的一个任务是
wait()
以终止其子进程(无论是否采用),这是为了正确清理进程表以避免僵尸。 - 当一个进程终止时,它的所有地址空间都被释放(每个资源都被释放),所以它不再使用任何内存,除了内核进程表中的几个字节(仅当处于僵尸状态时)。
关于c - Dameon 进程是否正在占用 RAM 中的内存,如果那里有 Daemons 进程的数量,那么 INIT 如何成为所有守护进程的父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896254/