Я пытаюсь вычислить контрольную сумму каждого двоичного файла в текущем каталоге, используя отдельный процесс для повышения производительности. Однако по какой-то причине мой вывод всегда неожиданен.Продолжайте создавать несколько дочерних процессов от одного и того же родителя
Как мне создать отдельный процесс для каждого файла? Должен ли я иметь весь процесс разветвления в пределах , пока (pids [i]! = -1)?
file_cnt = number of .bin files in the current dir
pid_t pids[file_cnt];
for(i = 0; i < file_cnt; i++)
{
if((pids[i]=fork()) < 0)
{
printf("Error forking");
return 0;
}
else if(pids[i]==0)
{
printf("Entering child \n");
printf("%s ", filenames[i]);
//reading file
handle = open(filenames[i], O_RDONLY);
//allocating memory
buffer = malloc(BUFFER_SIZE);
checksum = 0;
do
{
//calculating checksum
} while(length);
printf(" -%d\n", checksum);
printf("Exiting child \n");
}
}
У меня есть три файла в каталоге и мой выход выходит как:
There are 3 files:
Entering child
whateve2.bin -10540
Exiting child
Entering child
Entering child
whatever.bin -8399
Exiting child
whatever3.bin -34871
Exiting child
Entering child
whatever.bin -8399
Exiting child
[email protected]:~/CS330$ Entering child
whatever3.bin -34871
Exiting child
Entering child
whatever3.bin -34871
Exiting child
Entering child
whatever3.bin -34871
Exiting child
Ваш код печатает 'Exiting child', но он не выходит из дочернего элемента. – melpomene
Как я узнаю, когда ребенок выйдет? Разве это не в конце контрольной суммы? – Vab
Если он не был убит сигналом, процесс завершается, когда он достигает конца 'main' или когда он вызывает' exit() '. – melpomene