Я думаю, что я понимаю, как работает fork(), но выполняются только некоторые из моих утверждений в теле. Например, в каждом блоке преобразования, все Е() будет выполнять еще png_count, gif_count и bmp_count никогда не увеличиваем и остаются 0 (как видно в Е() выход для ребенка (х);C, Некоторые утверждения в fork() не выполняются
/* Create Processes */
printf("\n+++++++++++CREATING PROCESSES+++++++++++\n");
int i, pid;
png_count = 0;
gif_count = 0;
bmp_count = 0;
for(i = 0; i < convert_count; i++) {
pid = fork();
if(pid < 0) {
printf("Error: fork failed");
exit(1);
}
else if (pid == 0) {
/* Child execution */
/* PNG conversion */
if ((getpid() % 2) == 0) {
image_in_path = getInPath(input_dir, png_images[png_count]);
image_out_path = getOutPath(output_dir, png_images[png_count]);
printf("image_in_path: %s\n", image_in_path);
printf("Child (%d): %d\n", png_count+1, getpid());
png_count++;
printf("Converting: %s\n", image_in_path);
execlp("convert", "convert", image_in_path, "-resize", "200x200", image_out_path, NULL);
exit(1);
}
/* GIF conversion */
else if ((getpid() % 3) == 0) {
image_in_path = getInPath(input_dir, gif_images[gif_count]);
image_out_path = getOutPath(output_dir, gif_images[gif_count]);
printf("image_in_path: %s\n", image_in_path);
printf("Child (%d): %d\n", gif_count+1, getpid());
gif_count++;
printf("Converting: %s\n", image_in_path);
execlp("convert", "convert", image_in_path, "-resize", "200x200", image_out_path, NULL);
exit(1);
}
/* BMP conversion */
else {
image_in_path = getInPath(input_dir, bmp_images[bmp_count]);
image_out_path = getOutPath(output_dir, bmp_images[bmp_count]);
printf("image_in_path: %s\n", image_in_path);
printf("Child (%d): %d\n", bmp_count+1, getpid());
bmp_count++;
printf("Converting: %s\n", image_in_path);
execlp("convert", "convert", image_in_path, "-resize", "200x200", image_out_path, NULL);
exit(1);
}
}
else {
/* Parent Execution */
wait(NULL);
}
}
выхода:
+++++++++++CREATING PROCESSES+++++++++++
image_in_path: idir/panda.bmp
Child (1): 5389
Converting: idir/panda.bmp
image_in_path: idir/panda.bmp
Child (1): 5393
Converting: idir/panda.bmp
image_in_path: idir/penguin.gif
Child (1): 5397
Converting: idir/penguin.gif
image_in_path: idir/bmp.png
Child (1): 5402
Converting: idir/bmp.png
image_in_path: idir/bmp.png
Child (1): 5408
Converting: idir/bmp.png
image_in_path: idir/panda.bmp
Child (1): 5413
Converting: idir/panda.bmp
image_in_path: idir/panda.bmp
Child (1): 5417
Converting: idir/panda.bmp
image_in_path: idir/penguin.gif
Child (1): 5421
Converting: idir/penguin.gif
image_in_path: idir/panda.bmp
Child (1): 5425
Converting: idir/panda.bmp
image_in_path: idir/panda.bmp
Child (1): 5429
Converting: idir/panda.bmp
заранее спасибо за помощь, я потратил слишком много часов, пытаясь понять это, не повезло
Переменные прирастают, но они только увеличиваются в дочернем. Затем выполняются дочерние exec и увеличивается инкрементное значение. –
Вы пытались использовать отладчик, например gdb, чтобы отметить, что на самом деле происходит? – user3629249
Вы должны выполнить 'fflush (NULL);' перед 'fork()' –