с использованием следующего кода:
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
for (; argc > 1; argc--) {
if (0 == fork()) {
(void) fork();
}
puts( "mark" );
}
}
здесь приведен результат нескольких прогонов с 0, 1, 2 параметрами
richard@richard-desktop:~/Documents/forum$ ./untitled2
richard@richard-desktop:~/Documents/forum$ ./untitled2 1
mark
mark
mark
richard@richard-desktop:~/Documents/forum$ ./untitled2 1 2
mark
mark
mark
mark
mark
mark
mark
mark
richard@richard-desktop:~/Documents/forum$ mark
mark
mark
mark
Обнаружена проблема, возникшая в результате «гонки»условия?
Один из способов решения проблемы гонки - это wait()
для завершения всех дочерних процессов перед запуском другого набора дочерних процессов
IE
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
for (; argc > 1; argc--) {
if (0 == fork()) {
(void) fork();
}
puts( "mark" );
while( wait( NULL ) != -1 );
}
}
КакойРезультаты в очень удобочитаемом:
richard@richard-desktop:~/Documents/forum$ ./untitled2
richard@richard-desktop:~/Documents/forum$ ./untitled2 1
mark
mark
mark
richard@richard-desktop:~/Documents/forum$ ./untitled2 1 2
mark
mark
mark
mark
mark
mark
mark
mark
mark
mark
mark
mark