Здравствуйте. Вопрос по коду:
1 pid_t pid;
2 pid = fork ();
3 if (pid == –1)
4 perror ("fork");
5 /* дочерний ... */
6 if (!pid) {
7 const char *args[] = { "windlass", NULL };
8 int ret;
9 ret = execv ("/bin/windlass", args);
10 if (ret == –1) {
11 perror ("execv");
12 exit (EXIT_FAILURE);
}
}
Родительский процесс продолжает выполняться, как и ранее, за исключением появления у него нового дочернего.
Вызов execv() влияет только на дочерний процесс, заставляя его выполнить программу /bin/windlass.
Почему execv() применяется именно к дочернему, созданному fork(), процессу, а не к родительскому?
Второй вопрос: есть дерево (не суть какое). запускается процесс и далее используя структуру (ациклический граф) список «разворачивается» в соответствующую графу структуру процессов, отсекая от графа себя и передавая остаток графа дальше. в родителе создаю pipe(), а далее он наследуется. вопрос, собственно: процессы (узлы графа) смогут между собой коммуницировать используя один, созданный родителем, pipe или надо для каждой пары узлов отдельный pipe делать?