我編寫了下面的程序,以瞭解在沒有wait()或waitpid()調用時fork的工作方式。Linux叉:pid重用
int main()
{
pid_t childpid;
int retval = 0;
int i;
while(1){
//usleep(1);
childpid = fork();
if (childpid >= 0)
{
i++;
if (childpid == 0)
{
exit(retval);
}
else
{
//printf("childpid is %d\n", childpid);
}
}
else
{
printf("total no. of processes created = %d\n", i);
perror("fork");
exit(0);
}
}
}
這是我GET->
total no. of processes created = 64901
fork: Cannot allocate memory
我希望節目繼續下去,因爲我立即退出子進程和fork()的應該重用後PID>的PID_MAX的PID輸出。爲什麼不發生這種情況?
我很驚訝你沒有完全崩潰你的系統。通常有一個用戶進程限制,以避免這種行爲和叉炸彈。 'ulimit -u'應該會給你的系統一個非常大的進程限制。這是你係統中的一個主要漏洞。 – 2014-09-25 12:09:30
ulimit -u顯示:31488. 事實上,該程序甚至可以在後續嘗試中運行。 – Zaxter 2014-09-25 12:23:00