Gibt es in Windows eine Entsprechung zu "exec" von Unix Shell? Grundsätzlich muss ich vermeiden, einen neuen Prozess zu forken, damit die Eingabe- / Ausgabepipes sowie die Prozess-ID erhalten bleiben.
Bearbeiten:
Also, hier ist mein Problem. Ich habe einen Prozess A, der ein Skript startet, und dieses Skript endet mit der Ausführung eines Prozesses B. Ich benötige A, um die gesamte Ausgabe von B abzurufen und B durch Beenden des von ihm erzeugten Prozesses (des Skripts) zu beenden. .
Unter Unix exec
erledigt die Ausführung von B mit diesen Job.
windows
shell
windows-command-prompt
Daniel C. Sobral
quelle
quelle
Antworten:
AFAIK gibt es nicht. Windows fehlt
execv()
, wie Bash Exec es macht.call
funktioniert zum Aufrufen von Batch-Dateien (einfach, interpretieren Sie die Datei einfach im aktuellen Interpreter, ähnlich dem.
Befehl von bash ), jedoch nicht für exes.Dies macht es unmöglich, Einzeiler-Wrapper-Skripte für Skripte in einer beliebigen Sprache unter Windows zu schreiben. Sie erhalten immer die Meldung "Stapeljob beenden?" Mist auf Strg + C und das Beenden des Batch-Prozesses (nicht mit Strg + C, sagen Task-Manager) wird den untergeordneten Prozess nicht beenden. Ich suche jetzt nach einer C-Vorlagendatei, um diese Umhüllung durchzuführen.
UPDATE: Windows hat zwar
_execv()
eine POSIX-Kompatibilitätsschicht in MSVCRT, aber AFAIK (hat es nicht getestet) ist nur ein Wrapper,CreateProcess
sodass immer ein neuer Prozess erstellt wird und der aktuelle Prozess nicht ersetzt werden kann.quelle
Ich denke, call macht was du willst, aber ich bin mir nicht 100% sicher.
quelle
Sie können einen dynamischen Stapelbefehl erstellen und basierend auf der Ausgabe früherer Vorgänge ausführen. Ich bin nicht sicher, ob dies in Ihrem Fall eine Lösung wäre, aber der folgende Code funktioniert einwandfrei.
quelle
exec
...call
/path/to/exe/something.exe
quelle