Unixシェルのexecに相当するWindows CMDはありますか?


9

WindowsでUnix Shellの「exec」に相当するものはありますか?基本的に、プロセスIDだけでなく、入力/出力パイプが保持されるように、新しいプロセスのフォークを回避する必要があります。

編集:

だから、ここに私の問題があります。スクリプトを開始するプロセスAがあり、このスクリプトはプロセスBを実行することで終了します。AがBのすべての出力を取得する必要があります。また、生成したプロセス(スクリプト)を強制終了することでBを強制終了できる必要があります。 。

Unixでは、Bを実行しexecてその仕事をします。


同等のものはなく、少なくとも標準のWindowsコマンドとプログラムを使用していません。
ジョンガーデニアス

別のバッチファイルではなく実行可能ファイルを実行しようとしている場合、これを行う(サポートされている/現実的な)方法はありません。ただし、入出力パイプは通常、バッチファイルで実行されているアプリケーションによって継承されます。これを行う理由を説明できる場合は、代替案を提案できる場合があります。
Harry Johnston

スクリプトがこれをオーバーライドしない限り、プロセスAはすでにBのすべての出力を取得しているはずです。これは機能していませんか?
ハリージョンストン

Win32 APIを使用して、親プロセスが死んだときに子プロセスが死ぬように調整することは可能ですが、組み込みのコマンドラインオプションAFAIKはありません。ソースコード(Visual C ++用)を提供した場合、ビルドできますか?
ハリージョンストン

@ハリー私はJavaからスクリプトを分岐しているので、プロセスAがそのWin32 APIを使用するという考えである場合、それは機能しそうにありませんが、努力には感謝します。それを説明するだけではうまくいかないので、それを答えとして受け入れます。
ダニエルC.ソブラル2011

回答:


7

私の知る限りではありません。Windows execv()には、bash execが行う方法がありません。callバッチファイルの呼び出しには機能しますが(bashの.コマンドと同様に、現在のインタープリターでファイルを解釈するだけです)、exe ファイルには機能しません。

これにより、Windowsの任意の言語のスクリプト用の1行のラッパースクリプトを作成できなくなります。「バッチジョブを終了しますか?」Ctrl + Cでがらくたにしてバッチプロセスを強制終了しても(タスクマネージャーによるとCtrl + Cではなく)、子プロセスは強制終了されません。この折り返しを行うCテンプレートファイルを探しています。

更新:Windowsは_execv()MSVCRTのPOSIX互換性レイヤーにありますが、AFAIK(テストしていません)は単なるラッパーなCreateProcessので、常に新しいプロセスを作成し、現在のプロセスを置き換えることはできません。



1

動的バッチコマンドを作成し、前の操作の出力に基づいて実行できます。これがあなたの場合の解決策になるかどうかはわかりませんが、次のコードはうまく機能します。

SET yourDynamicCommand=SET var=1
%yourDynamicCommand%
ECHO var's value is %var%

これは次のようなことはしませんexec...
Jakuje '20

-1
  • バッチファイルを実行しますcall
  • exe-filesを実行する:コマンドは必要ありません。/path/to/exe/something.exe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.