Thanks for all.
I have looked old source code /sys/src/9/port/proc.c, and found the next code
exists from very old day.
lock(&procalloc);
for(;;) {
if((p = procalloc.free) != nil)
break;
snprint(msg, sizeof msg, "no procs; %s forking",
up != nil ? up->text: "kernel");
unlock(&procalloc);
resrcwait(msg);
lock(&procalloc);
}
procalloc.free = p->qnext;
unlock(&procalloc);
and rfork(2) says:
Rfork will sleep, if necessary, until required process resources are
available.
which is also exists from old day.
Nevertheless all programs, I believe, in /sys/src are written assuming rfork()
may return -l:
switch(rfork(….)){
case -1:
…
}
Any merit?