(PERL) system() startet nun Script, aber "&" bewirkt nichts ! HILFE Fortsetzung
Thomas
- perl
Hallo Cheatah
Weil er bei system() keine Bedeutung hat :-)
In der perlipc steht doch aber:
"Background Processes
You can run a command in the background with:
system("cmd &");
The command's STDOUT and STDERR (and possibly STDIN, depending on your shell) will be the same as the parent's. You won't need to catch SIGCHLD because of the double-fork taking place (see below for more details)."
Leider haben sämtliche Versuche mit fork zu einer Fehlermeldung geführt. Auch das scheinbar fehlerfreie, weil hier sehr häufig erwähnte, Script von Erik darüber habe ich nicht zum laufen bekommen. Das kann aber auch an mir liegen. Ich habe das Problem, daß ich scheinbar doch noch viel lernen muß. Einige kurze Antworten sind mir noch zu hoch.
Als ich das letzte mal eine ausführliche Beschreibung meines Problems hier schilderte, bekam ich unter anderem die Aussage
"Was Du wahrscheinlich brauchst, ist ein ganz normales Systemkommando, aber mit dem Operator "&" am Ende. Der sorgt dafür, daß der Prozeß vom Parent sauber abgetrennt wird - und dann sollte er auch dessen Ende überstehen."
Auch in anderen Foren kamen ähnliche Antworten auf ähnliche Fragen anderer. Selbst in der Original-Mailinglist von Activestate meine ich diese Antwort gelesen zu haben (wenn ich es richtig verstanden habe).
Es wäre klasse, wenn mir jemand mit einfachen Worten erklären könnte, warum es nicht funktioniert und wie ich fork oder exec und ActivePerl (hätte ich dies vielleicht schon früher erwähnen sollen?) benutzen muß. Aber wie gesagt, ich habe leider noch so meine Probleme mit Profierklärungen ;-(. Dazu noch die Fragen, die ich mir selbst zusammengereimt habe.
Könnte es sein, daß der "&"-Parameter durch den Direktstart mit DOS-basierender Pfadangabe "\" nicht richtig übergeben wird?
Wenn ja, kann ich die Syntax irgendwie ändern, das der Interpreter auch das versteht?
Vielleicht erkennt Ihr an meinem Text meine verzweifelte Lage. Denn es hängt momentan einiges davon ab, daß ich irgend eine Lösung finde.
Schon mal tausend Dank.
Thomas
Hallo Thomas
Könnte es sein, daß der "&"-Parameter durch den Direktstart mit DOS-basierender Pfadangabe "\" nicht richtig übergeben wird?
Willst du damit etwa sagen, der Rechner, auf dem du das Ganze zum Laufen bringen willst, ist ein DOS/Windows-Rechner? Sollte das der Fall sein, brauchst du dich nicht zu wundern, warum das alles nicht funktioniert. Denn die "&"-Kommandozeilenaufrufe von Prozessen sind eine Spezialitaet von Unix, ueberhaupt das ganze Zeugs mit fork, Vater-Sohn-Beziehungen, Semaphoren und dergleichen.
viele Gruesse
Stefan Muenz
Hallo Stefan,
eigentlich soll auf dem Server NT laufen. Scheint wohl doch mehr Unterschiede zugeben, als alle einem weiß machen wollen. Gibt es da vielleicht noch eine Hintertür dafür ein zweites Script völlig selbstständig laufen zu lassen, ohne das das erste auf das Beenden waretet. Oder muß ich jetzt einen Weg finden von hinten durch die Brust ins Auge? Ein paar kleine Ideen habe ich schon, aber ob das klappt steht in den Sternen! Wäre für jede Idee sehr dankbar.
Danke
Thomas
Gibt es da vielleicht noch eine Hintertür dafür ein zweites Script völlig selbstständig laufen zu lassen, ohne das das erste auf das Beenden waretet.
Ich habe die gesamte Disskussion leider nicht mitbekommen, so daß ich jetzt vielleicht etwas wiederhole. Sorry dafür im Voraus.
Also. Unter UNIX (LINUX, NT?) werden normalerweise alle Prozesse automatisch beim ausloggen beendet. Eine Möglichkeit das zu verhindern ist dem Prozessaufruf ein _nohup _ voranzustellen. Dann läuft er weiter, auch wenn man inzwischen weg ist, und alle Meldungen von STDOUT und STDERR werden in einer Datei nohup.out gespeichert.
---Einloggprozess -fork -I Wait for Vater I----------I Ende Einloggprozess
I I
I---Prozess Vater---fork---I Ende Vater
I
--------------Sohn--------------------I Ende Sohn
Mit "&" wird der aufgerufene Prozess in den Hintergrund geschoben, d.h. der aufrufende Prozess muss nicht auf das Beenden des Sohnes warten.
---Einloggprozess -fork --I Wait bis Ende Vater I-------weiter
I I
I---Prozess Vater---fork---------------------------------------------------I Ende Vater
I
--------------Sohn----I Ende Sohn
Vielleicht ist es das was du suchst, oder ich habe etwas mißverstanden.
Chiau
Pit
Nehmt die missglückte Skizze nicht so ernst, da ist beim posten etwas mit den Zeichenabständen verrutscht. Chiau
pit