Я работаю над сценарием cgi аудио-кодировщика, который использует libmp3lame.
Я пишу в смеси C / C ++.
Я планирую иметь точку входа cgi, которая может порождать несколько процессов кодирования, которые выполняются в фоновом режиме. Мне нужно, чтобы процессы кодирования были асинхронными, поскольку кодирование может занять несколько часов, но мне нужно, чтобы точка входа cgi мгновенно возвращалась, чтобы браузер мог продолжить свою работу.
Я нашел несколько решений для этого (некоторые завершены / некоторые нет), но есть еще несколько вещей, которые я хотел бы прояснить.
Решение 1 (самое простое): точка входа cgi - это bash-скрипт, который затем может запускать процесс cgi C ++ в фоновом режиме, отправляя вывод в / dev / null / 2 / &> 1 & (просто! Но не очень) элегантный).
Решение 2. Очень похоже на решение 1, за исключением того, что точка входа cgi находится в C ++ и использует system () для запуска proc / s и отправки вывода в / dev / null / 2 / &> 1 & again.
[вопрос] Это работает хорошо, но я не уверен, разрешают ли компании с общим хостингом использовать функцию system (). Это тот случай?
Решение 3 (неполное): я рассмотрел использование fork () / pthread_create () для порождения отдельных потоков, что кажется более элегантным, поскольку я могу оставаться в сферах C. Единственная проблема: кажется, что родитель поток не завершается, пока не будут возвращены все дочерние потоки.
[вопрос] Есть ли способ заставить родительский поток выйти, в то же время позволяя дочерним потокам продолжать работу в фоновом режиме.
[идея] Может быть, я смогу отправить вывод дочерней процедуры / с в черную дыру! Могу ли я просто перенаправить стандартный вывод в / dev / null. Если да, то как мне это сделать?
Надеюсь, это имеет смысл для кого-то. Я все еще немного новичок с вещами на C, так что, может быть, я упускаю очень простые концепции (пожалуйста, помилуй!)
Буду очень признателен за любые советы по этому вопросу.
Заранее большое спасибо,
Josh