我有這個程序(UNIX)fork()如何在循環中工作?
childpid = 0;
int i, n;
for(i=1; i < n; i++)
if((childpid = fork())
break;
fprintf(stderr, "i:%d process ID: %ld parent ID: %ld child ID: %ld\n,
i, (long)getpid(), (long)getppid(), (long)childpid);
return 0;
它說,因爲父進程的childpid變量沒有一個0值,它會跳出一個循環。子進程的PID爲0,並且在下一次迭代中將成爲父進程。
據我所知,在調用fork fork()之後,將使用代碼創建一個新進程。如果一個父進程由於它的childpid不是0而跳出循環,那麼這是不是意味着printf語句將會運行一次,並且程序將在循環結束後終止? 我很困惑這個程序如何運行。
我也有這個代碼
for(i=1; i < n; i++)
if(((childpid = fork()) <= 0)
break;
fprintf(stderr, "i:%d process ID: %ld parent ID: %ld child ID: %ld\n,
i, (long)getpid(), (long)getppid(), (long)childpid);
return 0;
這產生的處理的風扇並執行所述第一程序的相反。子進程由於其chilpid等於0而突破循環,並且父進程在循環中運行。
我在週一的考試,我已經明白一切 請你幫助:如果存在/
你竟然爲一個陌生人畫了一個完整的圖表?哇,我真的很感激。這是很多的幫助,我現在完全理解現在發生了什麼 因此,在代碼實際上中斷之前,一個孩子創建與pid零,繼續循環,成爲父母,創建另一個孩子和父母休息 明白了! – user3240534 2014-10-20 07:21:07
@ user3240534如果回答了您的問題,您可以點擊旁邊的勾號將其標記爲已接受。 – 2014-10-20 21:40:56