Next: , Up: Processes   [Contents][Index]


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

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

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

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

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

User Option: exec-suffixes

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

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

サブプロセス作成関数にはそれぞれ、buffer-or-name引数があります。これはプログラムの標準出力の行き先を指定します。これはバッファーかバッファー名であるべきです。バッファー名なら、もしそのバッファーがまだ作成されていなければ、そのバッファーを作成します。nilを指定することもでき、その場合はカスタム製のフィルター関数が出力を処理するのでなければ、出力を破棄するよう指示します(Filter Functions、およびRead and Printを参照のこと)。通常は、出力がランダムに混在してしまうため、同一バッファーに複数プロセスの出力を送信するのは避けるべきです。同期プロセスにたいしては、バッファーのかわりにファイルに出力を送信できます。

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

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

Variable: exec-directory

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

User Option: exec-path

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

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

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