Programy nie odczepiające się od terminala (gpm, innwatch, vixie crond)

Jakub Bogusz qboosh w prioris.mini.pw.edu.pl
Wto, 4 Wrz 2001, 10:54:43 CEST


On Sun, Sep 02, 2001 at 03:47:12PM +0200, Michal Kochanowicz wrote:
> On Sun, Sep 02, 2001 at 12:51:43PM +0200, Jakub Bogusz wrote:
> > Jest jeszcze problem deskryptora 12 - pozostaje, jeżeli restart demona
> > był robiony przez rpm (chociaż może to należy poprawić rpm, żeby po
> > fork() przed exec() zamykał niektóre deskryptory?).
> IMO należy poprawić rpma, choćby z tego powodu że wystarczy zrobić to w
> jedym miejscu a nie w każdym daemonie.

Zaglądałem do rpm-a na okoliczność tego.
Wywoływanie skryptów jest w lib/uninstall.c, funkcja runScript().
Między fork() a execv() część deskryptorów jest zamykana, jak widać nie
wszystkie. Niestety w tej funkcji nie bardzo wiadomo co może być jeszcze
otwarte (a nie mam ochoty śledzić kodu między wszystkimi open() i
close() w całym rpm-ie) - więc pozostaje chyba tylko metoda brutalna
for(fd=3;fd<N;fd++) close(fd); (albo coś w tym stylu).

Zresztą problem nie zamykanych deskryptorów dotyczy nie tylko rpm-a -
to jest fragment kodu postfiksa (src/master/master.c):

    /*
     * When running a child process, don't leak any open files that were
     * leaked to us by our own (privileged) parent process. Descriptors 0-2
     * are taken care of after we have initialized error logging.
     *
     * Some systems such as AIX have a huge per-process open file limit. In
     * those cases, limit the search for potential file descriptor leaks to
     * just the first couple hundred.
     *
     * The Debian post-installation script passes an open file descriptor into
     * the master process and waits forever for someone to close it. Because
     * of this we have to close descriptors > 2, and pray that doing so does
     * not break things.
     */
    if (fd_limit > 500)
        fd_limit = 500;
    for (fd = 3; fd < fd_limit; fd++)
        (void) close(fd);


-- 
Jakub Bogusz
http://prioris.mini.pw.edu.pl/~qboosh/



Więcej informacji o liście dyskusyjnej pld-devel-pl