СоНоты

fork() в CGI

Началось всё с того, что aspell периодически падает при предложении вариантов правильного спеллинга если, например, английским словарём проверяются и английские и русские слова. Конечно некузяво юзеру периодически выдеть сообщение о внутренней ошибке сервера, поэтому эту проверку завернул в отдельный процесс, создаваемый при помощи fork(), -- отработал -- хорошо; упал  -- не страшно, родительский процесс пойдёт дальше, пользователь увидит результат, хотя и без проверки спеллинга.

Но не тут-то было, оказывается  Apache и lighttpd  стали выводить HTTP-заголовки, выдаваемые CGI-мождулем дважды, один раз где положено, среди заголовков ответа, второй раз -- непосредственно вначале тела ответа. Причём, если у Apache включен KeepAlive, то всё отрабатывает правильно (проблемы нет).

После нескольких дней разборок, какое именно изменение привело к такому эффекту выяснилось, что виновато применеие fork(). Если чилда прибивать сразу по окончании его работы, то получаем эту проблему, если же отложить прибитие этого чилда до окончания всего вывода CGI-скрипта, то избежим этих грабель.