Итак, я пытался понять вилки, и хотя я понимаю основы (т. Е. Другой процесс создается с копией оригинала когда мы используем fork()
), я не могу по-настоящему понять, что происходит с создаваемыми процессами.Как использовать каждый процесс при использовании двух fork() в C
Например: Мне нужно написать программу, которая будет называть fork()
дважды, чтобы создать всего 4 процесса. Когда один процесс создается, я должен распечатать pid
с помощью getpid()
. После распечатки четырех идентификаторов моя программа должна печатать одну букву 10 раз.
Например, родительский 1 будет печатать 'A', для потомка 1 будет напечатано 'B', дочерний 2 будет печатать 'C', а родительский элемент будет печатать 'D'. Для этого я должен использовать putchar(ch);
и вывести вывод с fflush(stdout)
.
Это означает, что выход будет выглядеть следующим образом:
Process created, ID: 3856
Process created, ID: 3857
Process created, ID: 3858
Process created, ID: 3859
AAAAAABBBBBBBCDCDCDCDCDCDCBBBDCDCAAAADCD
До сих пор я получил четыре процессы для печати с этим кодом:
int main(void) {
pid_t child1, child2;
child1 = fork();
child2 = fork();
printf("Process created. ID: %d\n", getpid());
}
Но я не знаю, как использовать wait()
, чтобы все распечатывалось случайно, после того, как я напечатал идентификаторы.
Чтобы получить все, что мне нужно для распечатки, чтобы быть «случайным беспорядком», что мне делать? Должен ли я вызвать такие функции?
// in main
for(int i = 0; i < 10; ++i) {
char_parent1();
char_child1();
char_parent2();
char_child2();
}
return 0;
}
void char_parent1()
{
putchar('A');
fflush(stdout);
}
void char_child1()
{
putchar('B');
fflush(stdout);
}
// and so on for char_parent2() and char_child2()
В том случае, если мой профессор говорит, что я в основном печатать вещи одновременно и случайным образом, то почему я должен использовать wait()
?
так, где вы печатаете символ? отправьте код –
Прочитайте [Advanced Linux Programming] (http://advancedlinuxprogramming.com/), в котором есть несколько глав, чтобы ответить на ваши вопросы. –
@simon_xia Я добавил пример того, что, я думаю, должен делать .. возможно. – Alex