Next: , Previous: , Up: Microsoft Windows   [Contents][Index]


G.8 Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10でのサブプロセス

WindowsのネイティブアプリケーションとしてコンパイルされたEmacsには、(DOSバージョンとは対照的に)非同期サブプロセスにたいする完全なサポートが含まれます。Windowsバージョンでは、同期および非同期サブプロセスは、Windows 9X/MEおよびWindows NT/2000/XP/Vista/7/8/10で、32ビット、または64bitのWindowsアプリケーションを実行する限りは、うまく動作します。しかしサブプロセスでDOSアプリケーションを実行する場合は、問題に遭遇したり、そのアプリケーションを実行できないかもしれません。また、2つのサブプロセスで2つのDOSアプリケーションを実行する場合は、システムを再起動する必要があるかもしれません。

Windows9X標準のコマンドインプリターはDOSアプリケーションなので、そのようなシステムを使用する場合に、これらの問題が重要になります。しかしこれらの問題についてわたしたちができることはありません。Microsoftだけがこれをfixできるのです。

サブプロセスで1つのDOSアプリケーションを実行する場合、それが“様式に従って(well-behaved)”いる限り、そしてスクリーンへの直接アクセスや、その他の異例なことを行なわない限り、そのサブプロセスは期待されたとおりに動作すべきです。CPUモニターアプリケーションがある場合、そのDOSアプリケーションがアイドル状態でも、CPUは100%ビジーに見えるかもしれませんが、これは単にCPUモニターがプロセッサー負荷を計測する方法によるものです。

他のDOSアプリケーションを別のサブプロセスで開始する前に、DOSアプリケーションを終了しなければなりません。EmacsはDOSサブプロセスに割り込み、または終了させることができません。プログラムの終了コマンドを与えることだけが、そのようなサブプロセスを終了できる唯一の方法です。

同時に別のサブプロセスで2つのDOSアプリケーションの実行を試みた場合、それらの一方、または両方が非同期であっても、最初のサブプロセスが終了するまで、2番目に開始されたサブプロセスはサスペンドされます。

もし最初のサブプロセスと対話することができ、終了を指示できたら2番目のプロセスは通常どおり実行を継続するはずです。しかし2番目のサブプロセスが同期実行されている場合、Emacsは最初のサブプロセスが終了するまでハングするでしょう。最初のプロセスがユーザーによる入力なしには終了しない場合、Windows9Xでは再起動する以外に選択肢はありません。Windows NT/2000/XPで実行している場合、プロセスビューアーアプリケーションを使用して、適切なNTVDMのインスタンスをkillすることができます(これにより、両方のDOSサブプロセスが終了します)。

このような状況でWindows9Xを再起動する場合、StartメニューのShutdownコマンドを使用しないでください。これは通常システムをハングさせます。かわりにCtrl-Alt-DELとタイプしてShutdownを選択します。これは処理を行なうのに数分かかるかもしれませんが、通常どおり機能します。

変数w32-quote-process-argsは、Emacsがプロセス引数をクォートする方法を制御します。非nilは文字"でクォートすることを意味します。変数の値が文字の場合、Emacsは任意のクォート文字をエスケープするのに、その文字を使用します。それ以外の場合、プログラムのタイプにもとづいて、適切なエスケープ文字を選択します。

変数w32-pipe-buffer-sizeは、サブプロセスとの通信のためにパイプを作成するときに、Emacsがシステムに要求するバッファーサイズを制御します。デフォルト値は0で、この場合はOSがサイズを選択します。有効な正の値を指定した場合は、そのサイズ(byte)のバッファーを要求します。これは、サブプロセスと、バッファーされたパイプ入出力にたいして通常とは異なる動作を見せるプログラムとの通信を調整するのに使用できます。

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