Next: , Previous: MS-DOS Processes, Up: MS-DOS


C.8 サブプロセス(Windows 95、NT)

(DOS版と対比して)Windows専用にコンパイルしたEmacsでは、 非同期のサブプロセスを完全に使えます。 Windows版では、32ビットのWindowsアプリケーションを実行している限りは、 同期であれ非同期であれサブプロセスはうまく動作します。 しかし、サブプロセスでDOSアプリケーションを実行すると、 アプリケーションの実行に問題を生じたり実行できなかったりします。 さらに、2つのDOSアプリケーションを同時に2つのサブプロセスで実行すると、 システムをリブートしなければならなくなります。

Windows 95の標準のコマンドインタープリタ (および、ほとんどのコマンド行ユーティリティ)はDOSアプリケーションなので、 この種のシステムを使う場合には上記の問題は重要になります。 しかし、これに関してわれわれにできることは何もなく、 Microsoftだけが修正できるのです。

DOSアプリケーションのサブプロセスを1つだけ実行するならば、 『行儀がよく』て、しかも、画面を直接操作するなどの 非標準的な動作をしない限りは、サブプロセスは予想どおりに動作するはずです。 CPUモニタ(監視)アプリケーションを使うと、 DOSアプリケーションが停止しているときでさえも、 マシンは100%ビジーになりますが、 これはCPUモニタがプロセッサの負荷を調べる方法に起因します。

別のサブプロセスでDOSアプリケーションを実行する場合には、 まえもってDOSアプリケーションを終了しておく必要があります。 Emacsは、DOSのサブプロセスに割り込んだり停止させることができません。 このようなサブプロセスを終了する唯一の方法は、 そのプログラムに終了を指示するコマンドを与えることです。

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

最初のサブプロセスを操作できて終了を指示できるならば、 2番目のサブプロセスは正常に実行を継続するはずです。 しかし、2番目が同期サブプロセスであれば、 最初のサブプロセスが終了するまではEmacs自体が固まってしまいます。 ユーザー入力なしに終了できない場合には、 Windows 95を使っている限りリブート以外の選択はありません。 Windows NTであれば、プロセスを調べるアプリケーションを使って、 適当なntvdmを終了させます(するとDOSの2つのサブプロセスも終了します)。

このような状況でWindows 95をリブートすることが必要になったときには、 Startメニューの中のShutdownコマンドを使ってはいけません。 たいていの場合、システムが固まってしまいます。 かわりに、CTL-ALT-<DEL>を打鍵してShutdownを選びます。 処理に数分かかる場合もありますが、多くの場合、機能してくれます。