fork - Parent soll nicht auf auf child warten
-
Hallo zusammen,
ich habe ein Problem, das mich verwundert.
Ich möchte ein CGI-Programm forken. Der Child-Prozess soll dann das Programm im Komandomodus über execv aufrufen.
Dem Parent-Prozess soll es dann egal sein was das Childprozess macht und soll sich schließen.
Leider ist das nicht der Fall.Der Parent-Prozess wartet immer auf mein Child-Prozess bevor er schließt.
Mache ich das aber im Komando-Modus, dann reagiert er wie erwartet.Nun wollte ich nachfragen ob jemand eine Ahnung hat woran das liegen könnte.
Zur besseren Verständnis noch der Code, der verantwortlich ist:
CGI-Aufruf:
... if(getParam("test") == "fork") { int forkPID = fork(); if (forkPID == 0) { Tools::execute("/ ... /mytool.cgi --test=2"); return ; } return ; } ...
Komandomodus - Aufruf:
... if(cmdParam("--test") == "1") { std::string cmdLine = "./mytool.cgi --test=2"; Tools::execute(cmdLine); return 0 ; } if(cmdParameterEq("--test") == "2") { Tools::debugLog("sleep"); sleep(5); Tools::debugLog("fork"); return 0; } ...
Execute-Methode:
... bool Tools::execute(const std::string &cmdLine) { std::string tmp; if (fork() == 0) { // Whitespace entfernen tmp = trimString(cmdLine); size_t parCount = countStrParts(tmp, ' '); std::vector<std::string> parList; for (size_t i = 0; i < parCount; ++i) { parList.push_back(getStrPart(tmp, i, ' ')); } char **argv = new pchar[parCount+1]; for (size_t i = 0; i < parCount; ++i) { argv[i] = strdup(parList[i].c_str()); } argv[parCount] = 0; execv(argv[0], argv); return false; } return true; } ...
Ich würde auch auf eine andre Funktion (boost?) umsteigen, falls jemand eine alternative kennt.
Danke im voraus für jede Antwort
Gruß
-
http://www.itp.uzh.ch/~dpotter/howto/daemonize und vielleicht signal (SIGHUP, SIG_IGN);
-
AAAARRRRRG
Zieht mir ein Tütü an und nennt mich Sally ....
Warum auch immer ... jetzt funktioniert es. Ich habe das reopen genutzt und jetzt funktioniert es.
Danke noch mal
-
Als Editor verwende ich vim. Es gibt aber wahrscheinlich keinen Editor, der noch schwerer zu bedienen ist. Aber wenn man das mal gelernt hat, geht es damit sehr flugs. Syntaxhighlighting kann der auch und vieles mehr. Ich bin mir nicht sicher, ob ich den wirklich empfehlen kann. Der könnte leicht abschreckend sein. Es gibt zig Editoren. Probiere einfach einige aus und nimm den, der Dir persönlich ab besten gefällt.