Есть ли в Windows эквивалент "exec" в Unix Shell? По сути, мне нужно избегать разветвления нового процесса, чтобы сохранить каналы ввода / вывода, а также идентификатор процесса.
Редактировать:
Итак, вот моя проблема. У меня есть процесс A, который запускает сценарий, и этот сценарий заканчивается выполнением процесса B. Мне нужно, чтобы A получил все выходные данные B, а также смог убить B, убив процесс, который он породил (сценарий). ,
В Unix выполнение B с помощью exec
делает эту работу.
windows
shell
windows-command-prompt
Даниэль С. Собрал
источник
источник
Ответы:
AFAIK там нет. Windows не хватает,
execv()
как это делает bash exec.call
работает для вызова командных файлов (просто, просто интерпретировать файл в текущем интерпретаторе, аналогично.
команде bash ), но не для exes.Это делает невозможным написание однострочных скриптов-оболочек для скриптов на любом языке в Windows. Вы всегда будете получать "Завершить пакетную работу?" дерьмо на Ctrl + C и уничтожение пакетного процесса (не Ctrl + C, скажем из диспетчера задач) не убьет дочерний процесс. Я сейчас ищу файл шаблона C, чтобы сделать эту упаковку.
ОБНОВЛЕНИЕ: Windows имеет
_execv()
свой уровень совместимости с POSIX в MSVCRT, но AFAIK (не проверял его) - это просто оболочка,CreateProcess
поэтому он всегда будет создавать новый процесс, он не сможет заменить текущий процесс.источник
Я думаю, что колл делает то, что вы хотите, но я не уверен на 100%.
источник
Вы можете создать динамическую пакетную команду и выполнить ее на основе результатов предыдущих операций. Я не уверен, что это будет решением в вашем случае, но следующий код работает просто отлично.
источник
exec
...call
/path/to/exe/something.exe
источник