я делаю свою домашнюю работу в Linux Mint (у которой есть gcc 7.4.0), но среда тестирования домашней работы была Ubuntu 16.04 (у которой есть gcc 5.4.0)
это была работа с fork и связанный кодкак этот
pid_t pids[total_process_num], pid;
int run_process = 0;
while (run_process < total_process_num) {
pids[run_process] = fork();
if(pids[run_process] < 0){
return -1;
}
else if(pids[run_process] == 0){
break; //child
}
else if(run_process == total_process_num){
break;
}
run_process++;
}
printf("fork value and pid is %d, %ld\n", run_process,(long) pids[run_process]);
этот код печатается, если общее число процессов равно 5, чем в моей среде (если gcc 7.4 создает исполняемый файл), то результат равен
fork value and pid is 1, 0
fork value and pid is 0, 0
fork value and pid is 2, 0
fork value and pid is 5, 32766
fork value and pid is 4, 0
fork value and pid is 3, 0
в среде тестирования (если gcc 5.4сделать исполняемый файл) результат -
fork value and pid is 0, 0
fork value and pid is 1, 0
fork value and pid is 2, 0
fork value and pid is 5, 0
fork value and pid is 3, 0
fork value and pid is 4, 0
, так почему же эта разница?это из-за разницы версий gcc?я всегда думал, что fork возвращает parent к значению, отличному от 0, поскольку приведенный ниже код не работает
if (pids [run_process]! = 0) родительский процесс вводит этот оператор if в gcc 7.4, но не в 5.4.Я думаю, что gcc 5.4 - это плохо, поэтому я хочу знать причину этого результата