Next: , Up: プロセス   [Contents][Index]


39.1 サブプロセスを作成する関数

内部でプログラムを実行するサブプロセスを作成するために3つのプリミティブが存在します。それらの1つはmake-processであり、これは非同期プロセスを作成してプロセスオブジェクトをリターンします(非同期プロセスの作成を参照)。他の2つはcall-processcall-process-regionです。これらは同期プロセスを作成してプロセスオブジェクとをリターンしません(同期プロセスの作成を参照)。特定のタイプのプロセスを実行するために、これらのプリミティブを利用するさまざまな高レベル関数が存在します。

同期プロセスと非同期プロセスについては、以降のセクションで説明します。この3つの関数はすべて類似した様式で呼び出されるので、ここではそれらに共通の引数について説明します。

すべての場合において、関数は実行するプログラムを指定します。ファイルが見つからなかったり実行できなければエラーがシグナルされます。ファイル名が相対的なら、検索するディレクトリーのリストは変数exec-pathに格納されています。Emacsは起動の際に環境変数PATHの値にもとづいてexec-pathを初期化します。exec-path内では標準的なファイル名構成要素‘~’、‘.’、‘..’は通常どおりに解釈されますが、環境変数の置換(‘$HOME’等)は認識されません。それらの置換を行うにはsubstitute-in-file-nameを使用してください(ファイル名を展開する関数を参照)。このリスト内でnildefault-directoryを参照します。

プログラムの実行では指定された名前にサフィックスの追加を試みることもできます:

User Option: exec-suffixes

この変数は指定されたプログラムファイル名への追加を試みるためのサフィックス(文字列)のリスト。指定されたとおりの名前を試みたいならリストに""を含めること。デフォルト値はシステム依存。

注意してください: 引数programにはプログラムのファイル名だけが含まれて、コマンドライン引数を含めることはできない。これらを提供するために以下で説明する別の引数argsを使用しなければならない。

サブプロセス作成関数にはそれぞれbuffer-or-name引数があります。これはプログラムの出力の行き先を指定します。これはバッファーかバッファー名であるべきです。バッファー名の場合には、もしそのバッファーがまだ作成されていなければバッファーを作成します。nilを指定することもでき、その場合にはカスタム製のフィルター関数が出力を処理するのでなければ出力を破棄するよう指示します(プロセスのフィルター関数Lispオブジェクトの読み取りとプリントを参照)。通常は出力がランダムに混在してしまうために、同一バッファーに複数プロセスの出力を送信するのは避けるべきです。同期プロセスにたいしてはバッファーのかわりにファイルに出力を送信できます(したがって対応する引数はより適切なdestinationという名前で呼ばれる)。デフォルトでは標準出力と標準エラーの両ストリームの行き先(destination)は同じだが、3つのプリミティブはすべてオプションで標準エラーストリームに別の行き先を指定できる。

これら3つのサブプロセス作成関数は、すべて実行するプロセスにコマンドライン引数を指定できます。call-processcall-process-regionでは、これらは&rest形式の引数argsで与えられます。make-processでは実行するプログラムとコマンドライン引数はいずれも文字列のリストとして指定されます。コマンドライン引数はすべて文字列でなければならず、それらは別個の引数文字列としてプログラムに与えられます。文字列は指定されたプログラムに直接渡されるので、ワイルドカード文字やその他のshell構文はこれらの文字列内では特別な意味をもちません。

サブプロセスはその環境をEmacsから継承しますが、process-environmentでそれをオーバーラードするよう指定することができます。オペレーティングシステムの環境を参照してください。サブプロセスは自身のカレントディレクトリーをdefault-directoryの値から取得します。

Variable: exec-directory

この変数の値はGNU Emacsとともに配布されて、Emacsにより呼び出されることを意図したプログラムを含むディレクトリーの名前(文字列)。プログラムmovemailはそのようなプログラムの例であり、Rmailはinboxから新しいメールを読み込むためにこのプログラムを使用する。

User Option: exec-path

この変数の値はサブプロセス内で実行するためのプログラムを検索するためのディレクトリーのリスト。要素はそれぞれディレクトリーの名前(文字列)、またはnilのいずれか。nilはデフォルトディレクトリー(default-directoryの値)を意味する。この検索の詳細はexecutable-findを参照のこと。

exec-pathの値は、program引数が絶対ファイル名でないときにcall-processstart-processにより使用される。

一般的にはexec-pathを直接変更するべきではない。かわりにEmacs起動前に環境変数PATHが適切にセットされているか確認すること。PATHとは独立にexec-pathの変更を試みると混乱した結果へと導かれ得る。

Function: exec-path

この関数は変数exec-pathの拡張である。default-directoryがリモートパスを示す場合には、この関数は対応するリモートホスト上でプログラム検索に使用するデジレクトリーのリストをリターンする。default-directoryがローカルにあれば、この関数は単に変数exec-pathの値をリターンする。