Простите за беспокойство. Вот то, что мучает меня достаточно долго:
Не могу добиться того, чтобы при порождении двух дочерних процессов и создании канала между ними оба заканчивали работу. Кто-нибудь обязательно остаётся висеть в памяти.
Вот стандартный пример, который так же после выхода оставляет процесс-потомок болтаться в памяти ожидая данных из 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
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум как работает select на unnamed pipe? (2016)
- Форум Pipe (2011)
- Форум Переход от LinuxThreads к NTPL (2004)
- Форум Канал загадок (2007)
- Форум использование fork,pipe... (2005)
- Форум программный ввод пароля в ssh (2010)
- Форум execl не принимает аргумент из pipe (версия 2, обновленная) (2015)
- Форум Возвращаясь: Семафоры в Red Hat 9.0 (2004)
- Форум Как определить что отвалился клиент от сервера ? (C++/daemon) (2007)
- Форум Сигналы. (2013)