Простите за беспокойство. Вот то, что мучает меня достаточно долго: Не могу добиться того, чтобы при порождении двух дочерних процессов и создании канала между ними оба заканчивали работу. Кто-нибудь обязательно остаётся висеть в памяти. Вот стандартный пример, который так же после выхода оставляет процесс-потомок болтаться в памяти ожидая данных из pipe-ы (которая уже закрыта с входной стороны). //********************************* //* эмулятор bc, точнее плагиатор * //********************************* #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #ifndef PIPE_BUF #define PIPE_BUF 1024 #endif main() { int formula[2]; int answer[2]; pid_t pid; pipe(formula); pipe(answer); if ((pid = fork()) == 0) { /* Calculateur. */ (void) dup2(formula[0], 0); (void) dup2(answer[1], 1); execlp("bc", "bc", NULL); exit(1); } else if (pid != -1) { /* Pere */ char line[PIPE_BUF]; FILE* tobc = fdopen(formula[1], "w"); FILE* frombc = fdopen(answer[0], "r"); while (fputs("> ", stdout) != EOF && fflush(stdout) == 0 && fgets(line, PIPE_BUF, stdin) != NULL) { int n; if (fputs(line, tobc) == EOF || fflush(tobc) != 0) { exit(1); } if (fscanf(frombc, "%d", &n) == 1) { (void) printf("# %d\n", n); (void) fflush(stdout); } } } } //********************************* Если Вас не затруднит, ответьте ламеру, как надо поступать в подобной ситуации. Надо ли при окончании работы отца-потомка слать сигнал и убивать потомков? Короче, спасибо за помощь заранее!
Ответ на:
комментарий
от RSI
Ответ на:
комментарий
от Aleks_IZA
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Pipe (2011)
- Форум Канал загадок (2007)
- Форум как работает select на unnamed pipe? (2016)
- Форум fork() (2020)
- Форум использование fork,pipe... (2005)
- Форум Переход от LinuxThreads к NTPL (2004)
- Форум fork(), exec(), wait() (2020)
- Форум execl не принимает аргумент из pipe (версия 2, обновленная) (2015)
- Форум Работа с функциями семейства exec (2017)
- Форум Sort (2012)