3

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

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

4

1 回答 1

1

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

您可以写入以/proc/sys/kernel/pid_max增加 Linux 上的可用进程。请参阅此处了解更多信息。

于 2013-01-04T21:16:13.603 回答