Operating system 无法分叉,即使使用无限ulimit

Operating system 无法分叉,即使使用无限ulimit,operating-system,shell,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 lockedm

在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..."

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

它还说你有无限的内存。实际上,它在物理上受到已安装RAM和交换空间的限制。流程也会发生类似的情况。操作系统只能为进程表保留一定的空间。“无限”并不意味着你可以拥有一万亿个进程,只是操作系统没有人为地将其限制在自然数量以下


您可以写入
/proc/sys/kernel/pid_max
以增加Linux上的可用进程。有关更多信息,请参阅。

在while循环中添加
echo at c=$c1>&2
。它是在到达c=之前崩溃,还是在到达c=之后崩溃??。祝你好运。在脚本顶部执行一个
set-x
,以观察每个命令的执行情况。如果结果有用,您可以发布结果。那么有没有办法增加流程表的空间?