jestem w systemie Windows uruchomiony skrypt Perl, który wywołuje plik wykonywalny:Perl interpreter wiersza poleceń nie wychodząc
$command = "$path_to_exe -i $dir -o $results";
my $pid = fork();
if (!$pid) {
system($command);
#do stuff
} else {
#do stuff
}
print "Exiting..."
exit;
Zamiast po wyjściu, perl.exe tylko na biegu jałowym. Wyskakujące okienko mówi mi, że "interpreter wiersza poleceń Perla przestał działać."
Nie wiem zbyt wiele na temat zarządzania procesami w systemie Windows i na tym forum już przeczytałem, że nie jest dobrą praktyką używanie fork()
i exec()
, ale kod działa dobrze poza tłumaczem, który nie zamyka części. Próbowałem już wszystkiego, od próby zaimplementowania programu w systemie Unix (który daje ten sam błąd) do używania poleceń Win32::Process
- ale nic nie działa. Miałem nadzieję, że może istnieć prostsze rozwiązanie, które pozwoli mi zachować to, co już napisałem.
Jeśli ktoś mógłby wyjaśnić, co dokładnie dzieje się w systemie Windows, gdy ten kod jest uruchamiany, to też byłoby pomocne!
widelec-Exec nie jest dobra praktyka na wygraną, bo wygrana nie jest zoptymalizowany do niego. Win jest zoptymalizowany pod kątem ogromnego gwintowania i lokalnego rpc. Ale w twoim przypadku nie jest to prawdziwy problem, ponieważ dla ciebie nie jest tak naprawdę ważne, że twój skrypt owijki generuje 0,001 lub 0,01. Było to ważne tylko wtedy, gdy masz na przykład demona serwera baz danych lub coś, co trzeba nazwać tysiąc razy na sekundę. Inną rzeczą, że tak, fork() - exec() jest powolna, ale fork() - system() jest jeszcze tak powolna ... Widzę dalej, że po prostu nie zareagowałeś na mój drugi problem ($ pid i nie $$). Powinieneś być kooperatywny. – peterh