我想知道linux操作系统中的进程表是否有限制。能满吗?如果是这样,我会做什么来腾出空间(也许尝试删除僵尸进程的条目)?
答案1
运行sysctl kernel.pid_max kernel.threads-max
分别查看当前进程和线程的最大限制。 (每个进程至少占用一个线程;如果是多线程则占用更多。)
在面向桌面的发行版中,“出厂默认”进程限制可能是 32768,或者在面向企业的发行版中更高。在现代 64 位系统中,您可以使用/etc/sysctl.conf
将限制增加到(至少)4194304。
(内核版本 3.10.25 中的最大值为 4194304;此后可能会进一步增加。)
您无法删除僵尸进程,它们已经死了。你应该做的是杀死邪恶的僵尸大师,即僵尸进程的父进程,因为僵尸进程的存在表明父进程没有正常工作。一旦疏忽的父进程被杀死,僵尸进程就会被进程#1采用,进程#1通常会立即清理它们。
父进程应该在收到子进程已死亡的通知时始终检查其子进程的返回码,或者应该安排子进程在启动时放弃所有权,因此进程#1(通常/sbin/init
)可以采用他们。进程 #1 负有特殊责任,负责采用任何其他无父进程并处理其死亡通知。