无法分叉,即使是无限制的ulimit

时间:2013-01-04 20:53:21

标签: operating-system shell

在ksh中执行shell脚本时,我收到以下错误:

  

myscript.sh [13]:不能分叉 - 再试一次

我以为我用完了进程,但ulimit -a返回了这个:

# ulimit -a
time(cpu-seconds)    unlimited
file(blocks)         unlimited
coredump(blocks)     unlimited
data(kbytes)         unlimited
stack(kbytes)        unlimited
lockedmem(kbytes)    unlimited
memory(kbytes)       unlimited
nofiles(descriptors) 1000
processes            unlimited
vmemory(kbytes)      unlimited

这是我的脚本,它通过/ dev / ipc / ch2向另一台设备发送IPC消息:

#!/bin/sh

TIMEOUT=40

echo "Petting watchdog for $TIMEOUT seconds..."

c=1
while [[ $c -le $TIMEOUT ]]; do
#   echo "Petting $c"
    sleep 1
    echo -n "\001\002\003\004" > /dev/ipc/ch2
    (( c++ ))
done

echo "Done petting dog..."

它可能是什么?,我不明白为什么分叉会突然受到限制。

1 个答案:

答案 0 :(得分:1)

它还说你有无限的记忆力。实际上,它受到已安装的RAM和交换空间的限制。流程也会发生类似的事情。操作系统只能为进程表保留一定的空间。 “无限制”并不意味着您可以拥有万亿个进程,只是操作系统不会人为地限制它低于自然数量。

您可以写信至/proc/sys/kernel/pid_max以增加Linux上的可用进程。有关详细信息,请参阅here