c - Dameon 进程是否正在占用 RAM 中的内存,如果那里有 Daemons 进程的数量,那么 INIT 如何成为所有守护进程的父进程

标签 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 中浪费不必要的内存?

最佳答案

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

  • 当您终止 shell 时,您正在终止一个 session 领导进程,而这通常会终止它的所有子进程。如果这创建了孤立进程,它们将被 init 采用。
  • init 的一个任务是 wait() 以终止其子进程(无论是否采用),这是为了正确清理进程表以避免僵尸。
  • 当一个进程终止时,它的所有地址空间都被释放(每个资源都被释放),所以它不再使用任何内存,除了内核进程表中的几个字节(仅当处于僵尸状态时)。

关于c - Dameon 进程是否正在占用 RAM 中的内存,如果那里有 Daemons 进程的数量,那么 INIT 如何成为所有守护进程的父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33896254/

相关文章:

Regex/awk/etc 用于扫描我的源代码以进行翻译

regex - unix/linux 上的 grep : how to replace or capture text?

c - 在 C 中标记字符串

python - 将 pcap 文件转换为字节流的方法

c - 在 C/C++ 中执行 linux 程序并通过 stdin/stdout 与其通信的最简单方法

php - 在 Windows XP 上创建虚拟 LAMP 机器的最简单方法?

linux - 手机上的 SD 卡图像无法在 PC 上显示

linux - Linux 中的 Bash 脚本初学者

c - 视频尺寸组件的 AVOptions

c++ - MPI 中的发送和接收数组