我试图启动 1000 多个进程,但它在 999 处挂起了。
例如
#!/usr/bin/env zsh
for i in {1..$1} ; do
sleep 300 &
done
然后运行它,
$ ./launchsleep.sh 3000
./launchsleep.sh:4: job table full
答案1
设置ulimit -u
可能在这里起作用。
答案2
事实证明,zsh(以及大多数其他 shell)都有一个最大大小的作业表。该表跟踪后台进程,当它填满时,您无法再启动任何后台进程。
我的解决方法是改变我的脚本来启动守护进程而不是一堆后台进程。
例如
launch.sh:
#!/usr/bin/env zsh
for i in {1..$1} ; do
./dosleep.sh
done
dosleep.sh:
#!/usr/bin/env zsh
nohup sleep 300 &
此外,正如@Iain 所提到的,Solaris 对用户可以启动的进程数有限制 (ulimit -u)。在 Solaris 11 中,要增加此限制,请编辑 /etc/project 并增加 project.max-processes。