Ответ «когда печатать» действительно сводится к тому, что вы хотите напечатать ... если вы хотите напечатать только окончательный ответ, то вам, скорее всего, понадобится флаг, который указывает, когда вы находитесь вкорневой родительский процесс, и используйте оператор if
, чтобы проверить, действительно ли вы являетесь корневым родителем, чтобы вы печатали только одно число.Если, с другой стороны, вы хотите напечатать всю последовательность до конечного числа, то оператор if
не требуется.
Например, хорошим значением флага будет PID корневого процесса,Вы можете сохранить это в глобальной переменной с именем root_pid
в первых двух строках строки main()
, прежде чем начинать разветвление отдельных дочерних процессов.Таким образом, все дочерние процессы будут иметь одинаковое значение, установленное для root_pid
, и оператор if
может просто быть if (getpid() == root_pid)
.
Так что сделайте что-то вроде этого:
//fib.c
#include <unistd.h>
pid_t root_pid
int main()
{
root_pid = getpid();
//... rest of your program
}
И, как уже упоминалось выше, сделайте ваше if
утверждение внутри doFib
следующего:
if (getpid() == root_pid)
{
//...print results
}
else
{
exit(result)
}