#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void) {
pid_t a,b,c;
a=fork();
b=fork();
if(a||b)
c=fork();
printf("%d %d %d\n",a,b,c);
}
所以我把這段代碼改成這樣,原來是:
#include <stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void) {
if(fork()||fork())
fork();
return 0;
}
所以通過那個 printf,我將有 5 個行程,但它是正確的還是檢查行程數的更好方法?就像,列印所有行并只獲取具有 0 和其他一些值的行,在所有的叉子之后,這就是我所做的
uj5u.com熱心網友回復:
由于操作員短路,它們不等效||。
在第一個版本中,
b = fork();
在父級和第一個子級中無條件執行。所以此時有兩個子行程和一個孫子行程。
在第二個版本中,
if (fork() || fork())
創建一個子行程,然后僅在原始父行程中創建第二個子行程。它不會創建孫子行程,因為第一個在子行程中fork()回傳0,所以第二個fork()被跳過。
我不認為有辦法使這兩個等價而沒有變數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418548.html
標籤:
