systemd: PID file /var/run/nginx.pid not readable (yet?) after start.

Maxim Dounin mdounin на mdounin.ru
Чт Ноя 23 17:16:56 UTC 2017


Hello!

On Thu, Nov 23, 2017 at 07:44:57PM +0300, Igor Sysoev wrote:

> > On 23 Nov 2017, at 19:28, Gena Makhomed <gmm at csdoc.com> wrote:
> > 
> > Кстати, Lennart Poettering нашел еще одну ошибку в исходниках nginx:
> > https://lists.freedesktop.org/archives/systemd-devel/2017-November/039832.html
> 
> Интересно, откуда он это придумал про двойной fork()?
> 
> Во FreeBSD используется только один fork() что в 2017 году:
> https://svnweb.freebsd.org/base/head/lib/libc/gen/daemon.c?revision=326025&view=co
> что в 1994:
> https://svnweb.freebsd.org/base/head/lib/libc/gen/daemon.c?revision=1573&view=co

Двойной форк нужен на Линуксе, чтобы случайно не получить себе 
обратно controlling terminal.  Документировано, например, тут в 
man daemon(3) у glibc, 
http://man7.org/linux/man-pages/man3/daemon.3.html:

       The GNU C library implementation of this function was taken from BSD,
       and does not employ the double-fork technique (i.e., fork(2),
       setsid(2), fork(2)) that is necessary to ensure that the resulting
       daemon process is not a session leader.  Instead, the resulting
       daemon is a session leader.  On systems that follow System V
       semantics (e.g., Linux), this means that if the daemon opens a
       terminal that is not already a controlling terminal for another
       session, then that terminal will inadvertently become the controlling
       terminal for the daemon.

Смысла это делать в nginx'е - скорее нет, IMHO.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru