3

ksh でシェル スクリプトを実行すると、次のエラーが発生します。

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 とスワップ領域によって物理的に制限されます。プロセスでも同様のことが起こります。オペレーティング システムは、プロセス テーブル用に一定量のスペースしか予約できません。「無制限」とは、1 兆個のプロセスを持つことができるという意味ではなく、オペレーティング システムが人為的にプロセスを自然な量より下に制限していないということです。

/proc/sys/kernel/pid_maxLinux で使用可能なプロセスを増やすために書き込むことができます。詳しくはこちらをご覧ください。

于 2013-01-04T21:16:13.603 に答える