Ich bin in Windows einen Perl-Skript ausgeführt wird, der eine ausführbare Datei aufruft:Perl Kommandozeileninterpreter Verlassen nicht
$command = "$path_to_exe -i $dir -o $results";
my $pid = fork();
if (!$pid) {
system($command);
#do stuff
} else {
#do stuff
}
print "Exiting..."
exit;
Statt nach dem Austritt aus perl.exe leerläuft gerade. Ein Popup-Fenster sagt mir, dass der Perl-Befehlszeilen-Interpreter nicht mehr funktioniert.
Ich weiß nicht viel über Prozess-Management in Windows, und ich habe zuvor in diesem Forum gelesen, dass es keine gute Praxis ist, fork()
und exec()
zu verwenden, aber der Code funktioniert gut neben dem Interpreter nicht Teil zu schließen. Ich habe alles ausprobiert, um das Programm in Unix zu implementieren (das den gleichen Fehler gibt), um Win32::Process
Befehle zu verwenden - aber nichts funktioniert. Ich hoffte, dass es eine einfachere Lösung geben würde, die es mir ermöglichen würde, das zu bewahren, was ich bereits geschrieben habe.
Wenn jemand erklären könnte, was genau in Windows passiert, wenn dieser Code ausgeführt wird, wäre das auch eine Hilfe!
gabel exec ist keine gute Praxis auf Sieg, weil Sieg nicht darauf optimiert ist. Win ist zu massiven Threading und lokalen RPC optimiert. Aber in Ihrem Fall ist es kein echtes Problem, denn für Sie ist es nicht wirklich wichtig, dass Ihr Wrapper-Skript 0,001s oder 0,01s Overhead produziert. Es war nur wichtig, wenn Sie zum Beispiel einen Datenbankserver-Daemon oder etwas hatten, das tausendmal pro Sekunde aufgerufen werden muss. Eine andere Sache, dass ja, fork() - exec() ist langsam, aber fork() - system() ist sogar so langsam ... Ich sehe weiter, dass Sie einfach nicht auf mein zweites Problem ($ pid und nicht $$). Du solltest kooperativ sein. – peterh