То, что вы должны изучать здесь, это то, что fork () дублирует ваш процесс - в точке fork ().Он возвращает Process IDentifier (PID) number в родительский процесс и zero в дочерний процесс.
Таким образом, просто наблюдая за возвратом fork ()путь выполнения может определить, являются ли они родительским или дочерним процессом.
Таким образом, чтобы реализовать проблему, я использовал метод управления всем из одного родительского процесса, и чтобы потомок просто выводил букву, затемexit () - который завершает процесс.
Было бы намного лучше с циклом for (), но это было запрещено.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();
if (pid == 0)
{
// child process only
printf("A");
exit(0);
}
pid = fork();
if (pid != 0)
pid = fork();
if (pid != 0)
pid = fork();
if (pid == 0)
{
// child process only
printf("B");
exit(0);
}
return 0;
}
Примечание: я подозреваю , что он может иногда смешиватьсяиз-за загрузки системы, планирования и т. д. Но во всех моих тестах я получил правильный ответ.