Czy w systemie Windows istnieje odpowiednik „exec” powłoki Unix Shell? Zasadniczo muszę unikać rozwidlania nowego procesu, aby zachować rury wejściowe / wyjściowe, a także identyfikator procesu.
Edytować:
Oto mój problem. Mam proces A, który uruchamia skrypt, a skrypt ten kończy się uruchomieniem procesu B. Potrzebuję A, aby uzyskać wszystkie dane wyjściowe B, a także móc zabić B, zabijając proces, który się pojawił (skrypt) .
W systemie Unix wykonywanie B za pomocą exec
tej funkcji działa.
windows
shell
windows-command-prompt
Daniel C. Sobral
źródło
źródło
Odpowiedzi:
AFAIK nie ma. Windowsowi brakuje tego,
execv()
co robi bash exec.call
działa w przypadku wywoływania plików wsadowych (łatwe, wystarczy zinterpretować plik w bieżącym interpretera, podobnie jak.
polecenie bash ), ale nie w exe.Uniemożliwia to pisanie skryptów opakowujących jeden wiersz dla skryptów w dowolnym języku w systemie Windows. Zawsze otrzymasz komunikat „Zakończyć zadanie wsadowe?” bzdury na Ctrl + C, a zabicie procesu wsadowego (nie przy pomocy Ctrl + C, jak mówi menedżer zadań) nie zabije procesu potomnego. Teraz szukam pliku szablonu C do tego zawijania.
AKTUALIZACJA: Windows ma
_execv()
w swojej warstwie zgodności z POSIX w MSVCRT, ale AFAIK (nie testowałem tego) to tylko opakowanie,CreateProcess
więc zawsze będzie tworzyć nowy proces, nie może zastąpić bieżącego procesu.źródło
Myślę, że połączenie działa tak, jak chcesz, ale nie jestem w 100% pewien.
źródło
Można zbudować dynamiczne polecenie wsadowe i wykonać je na podstawie wyników poprzednich operacji. Nie jestem pewien, czy byłoby to rozwiązanie w twoim przypadku, ale poniższy kod działa dobrze.
źródło
exec
...call
/path/to/exe/something.exe
źródło