Название: Проблемы с демоном в Linux Отправлено: dssoft от Июль 19, 2005, 23:47 На днях столкнулся с такой вот проблемой.
Стоит: Red Hat Linux release 9 (Shrike) + Apache 2.0.40. Есть скрипт на PHP, который с помощью exec() запускает сишную прогу myprogram. myprogram делает fork() и работает как демон. Открывает при работе только одно исходящее соединение, порты не слушает. Запускаю через браузер свой PHP-скрипт. Он запускает сишную программу. Все работает отлично. Затем мне понадобилось перезапустить Web-сервер. Делаю: service httpd stop. Но после того, как я обратно сделал service httpd start, получил ошибку: make_sock: could not bind to address 0.0.0.0:443 no listening sockets available, shutting down Хм, 5 минут назад все ж отлично работало. Делаю netstat -nlp и вижу такую картину: Код: Active Internet connections (only servers) Т.е. myprogram с правами apache умудрилась занять 443-й порт, который занимал Web-сервер! Причем, если запустить две копии myprogram, она займет порты 80 и 443. Как можно справиться с этой проблемой? Т.е. чтобы моя программа не начинала слушать порты Web-сервера после его остановки. Спасибо. Название: Проблемы с демоном в Linux Отправлено: DmitriyDMA от Февраль 21, 2006, 14:19 Создается впечатление что когда вы делаете fork() то новый процесс получает копию памяти веб-сервера и соответственно объект(или неважно что) который слушает tcp порт. Надо делать fork из чистого процесса не знаю каким образом, или удалять ненужные объекты. Можно посмотреть на vfork он вроде не делает копию адресного пространства родительского процесса.
|