Ich bin mir nicht sicher, warum Sie denken, dass fcntl () fügt sich in diese. , Ein fd Sie close ().
Es ist unbedingt erforderlich, dass ein
Daemon close FD's 0, 1 und 2. Nach dem, dass, wie die Juristen sagen, "angemessene Köpfe bestehen können". In den Tagen, als wir waren begrenzt auf 64 fd's, war es sinnvoll, sich auf eine enge Schleife () auf sie alle. Wenn ich an, um einen
Daemon, Ja, ich denke, dass ich würde Sie getconf (_SC_OPEN_MAX), um die maximal mögliche fd-und Loop-Aufruf von close () auf jeder letzte. Dies könnte Tausende von close ()-Aufrufe, die nicht erforderlich sind, aber in der Nähe () nicht sehr schnell, wenn es gegen einen nicht-offenen, fd.
Wenn sie schließen stdin, stdout und stderr, würde ich sagen, dass ihre Haltung ist vernünftig. Aber ich glaube, sie haben eine schwierige Zeit die Produktion in jeder beliebigen Sprache
posix , die sie unterstützt. Der
posix Standard ist on-line, und wir haben einen Link auf unserer Homepage. Genau, auf welchem sie nennen?
Es sollte sehr leicht zu lösen Ihr Problem sein. Können Sie nicht das Programm-Server nicht verlassen extra fd's geöffnet?
Oder, wenn dies
Daemon genannt wird, sagen, daemonx, schreiben Sie einfach ein Programm, das schließt alle fd und dann exec () 's daemonx. Rufen Sie Ihr Programm pre_daemonx. Have your app-Server Call pre_daemonx.
Ist der Name "daemonx" hart-codierten in eine ca. unchangable-Server? Kein Problem. Umbenennen "daemonx" auf "real.daemonx" und rufen Sie das Programm "daemonx".
Welchen Weg Sie hier, zur Festsetzung dieser sollte 10 Minuten Problem.