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