Помогите чайнику, переходящему с виндового программирования на линуксовое.
Использую Debian (не знаю, важно это или нет). Суть проблемы следующая:имеется процесс, который в цикле читает данные с /dev/dsp, и если они превышают определенный порог, открывает на запись файл и пишет эти данные туда. После того, как некоторое время на /dev/dsp значение считываемых данных падает ниже указанного порога, файл закрывается и необходимо его скормить oggenc-у для перекодировки и компрессии из raw-sound в ogg.
Вот кусок исходника:
for (;;) {
read(mic,bufp,4);
val = ((int)data[0]+(int)data[2])+((int)data[1]+(int)data[3])*256;
if (abs(val) < thresh) {
...(здесь дампим /dev/dsp в файлик пока есть сигнал на входе саундкарты) // запускаем перекодировщик отдельным процессом чтоб не мешал следующей записи
pid_t pID;
pID = fork();
if (pID==0) {
execlp("sh","-c","runogg.sh",recfile2,NULL);
}
}
}
И вот содержимое runogg.sh:
oggenc --raw -B 16 -C 2 -R 44100 --quiet $1 > /dev/null
rm $1
exit
Проблема в том, что после каждого запуска энкодера в системе остается "потерянный" child-процесс, который бы согласно правилам хорошего тона надо убрать. В винде это называлось незакрытым хэндлом, и там я просто пускал поток, в потоке запускал процесс, ждал когда он завершится (при этом основной процесс записи raw-звука продолжает работать, пишет файлы и запускает потоки с запуском энкодера для каждого нового файла) и после завершения процесса прибивал хэндлы процесса и запущенного для его инициализации потока.
Вопрос: как в линухе это правильно сделать?