是否可以在Linux bash中限制子进程的pid?

时间:2014-10-23 10:55:04

标签: linux bash pid

例如bash pid是3000,我想限制子pid在[3001,3010]范围内。

我想要这个,因为我在bash中写了一个无限的while循环,pid会爆炸。

while true;do
    something;
    sleep 5;
done;

每个循环产生至少3个子进程(true,something,sleep)。所以pid whill以每秒至少3的速度增长。过了一段时间,ps aux会显示一个笨拙的大pid,我认为这不是一件好事。

3 个答案:

答案 0 :(得分:2)

PID不会“爆炸”。它们由内核回收。您可以在/ proc / sys / kernel / pid_max中看到最大PID编号。当然,如果您愿意,可以修改此值。

答案 1 :(得分:1)

不,这是完全不可能的,因为当运行fork(2)系统调用时,内核分配了pid。用户级应用程序或库无法更改。事实上,内核在某些时候正在回收pid,如answered by Alex

如果子进程的pid(fork)不合适,您可能会立即对exitgetpid进行大循环,但这种做法很疯狂,因为你在幸运之前可能需要fork几千次。

也许namespaces(7)可能是相关的。

答案 2 :(得分:1)

没有理智的方法可以从用户空间那里做到这一点,也没有理智的想法。

如果你确信你必须解决这个问题,并且你拥有something的来源,那就破解它在迭代之间运行一个sleep的无限循环。那么你将永远保持相同的PID。

(或者稍微偏离墙壁,破解Bash,以便sleepsomething也是内置的。为了记录,true已经是内置的Bash,所以它实际上不会产生子进程。)