На днях столкнулся с такой вот проблемой.
Стоит: 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)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
...
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 14656/myprogram
...
Т.е. myprogram с правами apache умудрилась занять 443-й порт, который занимал Web-сервер! Причем, если запустить две копии myprogram, она займет порты 80 и 443.
Как можно справиться с этой проблемой? Т.е. чтобы моя программа не начинала слушать порты Web-сервера после его остановки.
Спасибо.