次: , 前: Processes, 上: Processes


36.1 サブプロセス作成関数

プログラムを実行するために新たなサブプロセスを作る関数が3つあります。 その1つstart-processは、非同期プロセスを作成して プロセスオブジェクトを返します(see Asynchronous Processes)。 残りの2つ、call-processcall-process-regionは 同期プロセスを作成しますが、プロセスオブジェクトは返しません (see Synchronous Processes)。

同期/非同期プロセスについては以下の節に述べます。 3つの関数の呼び出し方は類似しているので、 ここではそれらに共通な引数について述べます。

いずれの場合でも、関数の引数programは、 実行すべきプログラムを指定します。 そのファイルがみつからなかったり実行できないと、 エラーを通知します。 ファイル名が相対名であると、 変数exec-pathは探索すべきディレクトリのリストを保持しています。 Emacsは起動時に環境変数PATHの値に基づいてexec-pathを 初期化します。 `~'、`.'、`..'のファイル名の標準的な書き方は、 exec-pathでも普通どおりに解釈されますが、 (`$HOME'などの)環境変数の置換は認識しません。 それにはsubstitute-in-file-nameを使います (see File Name Expansion)。

サブプロセスを作成する各関数には、 プログラムの標準出力の受け取り場所を指定する 引数buffer-or-nameがあります。 これはバッファかバッファ名である必要があります。 バッファ名であると、そのバッファが既存でなければ新たに作成します。 nilでもかまいませんが、その場合、 フィルタ関数で処理しない限り出力を破棄します。 (Filter Functionsとsee Read and Print)。 通常、複数のプロセスの出力を同じバッファへは送らないようにします。 それらの出力がでたらめに混ざってしまうからです。

サブプロセスを作成する3つの関数すべてに、 &rest引数であるargsがあります。 argsはすべてが文字列である必要があり、 それぞれを区切ってコマンド行引数としてprogramに与えられます。 引数全体を指定されたプログラムへ直接渡すため、 これらの引数ではワイルドカード文字や他のシェル構文の特別な意味はありません。

注意: 引数programにはプログラムの名前だけを指定し、 コマンド行引数はいっさい指定しない。 コマンド行引数はargsで与えること。

サブプロセスのカレントディレクトリは default-directoryの値で決まります(see File Name Expansion)。

サブプロセスはEmacsから環境変数を継承しますが、 優先するものをprocess-environmentで指定できます。 See System Environment

— 変数: exec-directory

この変数の値は、Emaccsが起動することを意図した GNU Emacsとともに配布されたプログラム群を収めたディレクトリ名 (文字列)である。 プログラムmovemailはそのようなプログラムの例であり、 inboxから新たなメイルを取り出すためにrmailが利用する。

— ユーザオプション: exec-path

この変数の値は、サブプロセスで実行するプログラムを探索する ディレクトリのリストである。 各要素はディレクトリ名(文字列)であるか、 デフォルトディレクトリ(つまりdefault-directoryの値) を意味するnilである。 引数programが絶対ファイル名でないと、 call-processstart-processexec-pathの値を使う。