Operating system 无法分叉,即使使用无限ulimit
在ksh中执行shell脚本时,出现以下错误: myscript.sh[13]:无法分叉-请重试 我以为进程用完了,但是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
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
,以观察每个命令的执行情况。如果结果有用,您可以发布结果。那么有没有办法增加流程表的空间?