GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Windows-Processes.html ・ emacs-doc.conao3.com

I.8 Windows 9X/ME および Windows NT/2K/XP/Vista/7/8/10 上のサブプロセス

ネイティブのWindowsアプリケーションとしてコンパイルされたEmacs(DOS版とは異なります)では、非同期サブプロセスが完全にサポートされています。Windows版では、32ビットまたは64ビットのWindowsアプリケーションのみを実行する限り、すべてのバージョンのMS-Windowsで同期および非同期サブプロセスが正常に動作します。ただし、サブプロセスでDOSアプリケーションを実行すると、問題が発生したり、アプリケーションを全く実行できなかったりすることがあります。また、2つのサブプロセスで同時に2つのDOSアプリケーションを実行すると、システムの再起動が必要になる場合があります。

Windows 9Xの標準コマンドインタプリタ(およびほとんどのコマンドラインユーティリティ)はDOSアプリケーションであるため、このシステムを使用する際にはこうした問題が顕著に現れます。しかし、これらに対して我々にできることはなく、解決できるのはMicrosoftだけです。

DOSアプリケーションのサブプロセスを1つだけ実行する場合、そのサブプロセスが「行儀よく」動作し、画面への直接アクセスやその他の異常な動作を行わない限り、期待通りに動作するはずです。CPUモニターアプリケーションを使用している場合、DOSアプリケーションがアイドル状態であってもマシンは100%稼働しているように見えますが、これは単にCPUモニターがプロセッサ負荷を測定する方法による現象にすぎません。

別のサブプロセスで他のDOSアプリケーションを起動する前に、DOSアプリケーションを終了させる必要があります。EmacsはDOSサブプロセスを中断または終了させることができません。このようなサブプロセスを終了させる唯一の方法は、そのプログラムに終了を指示するコマンドを与えることです。

2つのDOSアプリケーションを別々のサブプロセスで同時に実行しようとすると、いずれか一方または両方が非同期であっても、先に起動した方のアプリケーションは、2番目に起動した方が終了するまで一時停止されます。

最初のサブプロセスに移動して終了を指示できれば、2番目のサブプロセスは通常通り続行されるはずです。ただし、2番目のサブプロセスが同期型である場合、最初のサブプロセスが終了するまでEmacs自体がハングしてしまいます。ユーザーの操作なしに終了しない場合は、Windows 9Xで動作させているなら再起動するしかありません。Windows NT以降で動作させている場合は、代わりにプロセスビューアアプリケーションを使用して、該当するNTVDMのインスタンスを強制終了させることができます(これにより両方のDOSサブプロセスが終了します)。

このような状況でWindows 9Xを再起動する必要がある場合は、StartメニューのShutdownコマンドを使用しないでください。通常、システムがハングしてしまいます。代わりに、Ctrl-Alt-DELと入力してからShutdownを選択してください。通常はこれでうまくいきますが、処理に数分かかる場合があります。

変数 w32-quote-process-args は、Emacs がプロセス引数をどのようにクォートするかを制御します。nil 以外の場合は、" 文字でクォートします。値が文字である場合、Emacs はその文字を使用して出現するあらゆるクォート文字をエスケープします。そうでない場合は、プログラムの種類に基づいて適切なエスケープ文字を選択します。

変数 w32-pipe-buffer-size は、Emacs がサブプロセスとの通信用にパイプを作成する際にシステムに要求するバッファのサイズを制御します。デフォルト値は 0 で、この場合は OS がサイズを決定します。有効な正の値を指定すると、そのサイズ(バイト単位)のバッファが要求されます。これにより、パイプ I/O のバッファリングに関して特異な挙動を示すプログラムに合わせて、サブプロセスとの通信を調整することが可能です。

MS-DOSプログラムをEmacsのサブプロセスとして起動する場合、こうしたプログラムからのデータ読み込み速度が低下することがあります。このようなケースでは、変数 w32-pipe-read-delay に0以外の値を設定することでスループットが向上する可能性があり、推奨値は50です。デフォルト値は0です。

w32-shell-execute 関数は、特定の種類のドキュメントやファイルに対して、ある標準的な Windows 操作を処理するように登録された MS-Windows アプリケーションを実行するカスタムコマンドを作成する際に有用です。この関数は、Windows の ShellExecute API をラップしたものです。詳細については、MS-Windows API のドキュメントを参照してください。