Ik weet niet zeker waarom u denkt dat fcntl () past in dit. Het afsluiten van een fd u gebruik maken van close ().
Het is absoluut noodzakelijk dat een
daemon close FD's 0, 1 en 2. Na dat, zoals de juristen zeggen, kan "redelijke geesten oneens". In de dagen toen we beperkt tot 64 fd, was het redelijk eenvoudig lus beroep close () op hen allen. Als ik het schrijven van een
daemon, Ja ik denk dat ik zou gebruiken krijg getconf (_SC_OPEN_MAX) om de maximaal mogelijke FD en lus beroep close () op elke laatste. Dit kan duizenden close () oproepen die niet nodig zijn, maar dicht () niet heel snel wanneer ingeroepen tegen een niet-open fd.
Als ze stdin, stdout sluiten zijn, en stderr, zou ik moeten zeggen dat hun houding is redelijk. Maar ik geloof dat ze een moeilijke tijd de productie van elke taal te hebben
POSIX die hen ondersteunt. De
POSIX standaard is on-line en we hebben een link naar het op onze homepage. Precies welke sectie ze noemen?
Het zou heel gemakkelijk zijn om uw probleem wel op te lossen. Kun je niet veranderen de app server niet verlaten fd extra's open?
Of als dit
daemon heet, zeg, daemonx, net een programma schrijven dat sluit alle FD en dan exec () 's daemonx. Bel uw programma pre_daemonx. Laat je app server bellen pre_daemonx.
Is de naam "daemonx" hard-coded in een unchangable app-server? Geen probleem. Hernoemen "daemonx" in "real.daemonx" en bel uw programma "daemonx".
Welk pad je hier, deze vaststelling moet een 10 minuten probleem.