内部でプログラムを実行するサブプロセスを作成するために3つのプリミティブが存在します。それらの1つはmake-process
であり、これは非同期プロセスを作成してプロセスオブジェクトをリターンします(非同期プロセスの作成を参照)。他の2つはcall-process
とcall-process-region
です。これらは同期プロセスを作成してプロセスオブジェクとをリターンしません(同期プロセスの作成を参照)。特定のタイプのプロセスを実行するために、これらのプリミティブを利用するさまざまな高レベル関数が存在します。
同期プロセスと非同期プロセスについては、以降のセクションで説明します。この3つの関数はすべて類似した様式で呼び出されるので、ここではそれらに共通の引数について説明します。
すべての場合において、関数は実行するプログラムを指定します。ファイルが見つからなかったり実行できなければエラーがシグナルされます。ファイル名が相対的なら、検索するディレクトリーのリストは変数exec-path
に格納されています。Emacsは起動の際に環境変数PATH
の値にもとづいてexec-path
を初期化します。exec-path
内では標準的なファイル名構成要素‘~’、‘.’、‘..’は通常どおりに解釈されますが、環境変数の置換(‘$HOME’等)は認識されません。それらの置換を行うにはsubstitute-in-file-name
を使用してください(ファイル名を展開する関数を参照)。このリスト内でnil
はdefault-directory
を参照します。
プログラムの実行では指定された名前にサフィックスの追加を試みることもできます:
この変数は指定されたプログラムファイル名への追加を試みるためのサフィックス(文字列)のリスト。指定されたとおりの名前を試みたいならリストに""
を含めること。デフォルト値はシステム依存。
注意してください: 引数programにはプログラムのファイル名だけが含まれて、コマンドライン引数を含めることはできない。これらを提供するために以下で説明する別の引数argsを使用しなければならない。
サブプロセス作成関数にはそれぞれbuffer-or-name引数があります。これはプログラムの出力の行き先を指定します。これはバッファーかバッファー名であるべきです。バッファー名の場合には、もしそのバッファーがまだ作成されていなければバッファーを作成します。nil
を指定することもでき、その場合にはカスタム製のフィルター関数が出力を処理するのでなければ出力を破棄するよう指示します(プロセスのフィルター関数とLispオブジェクトの読み取りとプリントを参照)。通常は出力がランダムに混在してしまうために、同一バッファーに複数プロセスの出力を送信するのは避けるべきです。同期プロセスにたいしてはバッファーのかわりにファイルに出力を送信できます(したがって対応する引数はより適切なdestinationという名前で呼ばれる)。デフォルトでは標準出力と標準エラーの両ストリームの行き先(destination)は同じだが、3つのプリミティブはすべてオプションで標準エラーストリームに別の行き先を指定できる。
サブプロセスを生成する3つの関数はすべて、実行するプロセスにたいしてコマンドライン引数を指定できます。call-process
とcall-process-region
の場合には&rest
引数にargs、make-process
には実行するプログラムとそのコマンドライン引数両方に文字列リストの形式で指定します。コマンドライン引数はすべて文字列でなければならず、個別の引数文字列としてプログラムに与えられます。これらの文字列内は指定されたプログラムに直接渡されるので、ワイルドカード文字やその他のシェル構文は文字列内で特別な意味はもちません。
サブプロセスはその環境をEmacsから継承しますが、process-environment
でそれをオーバーラードするよう指定することができます。オペレーティングシステムの環境を参照してください。サブプロセスは自身のカレントディレクトリーをdefault-directory
の値から取得します。
この変数の値はGNU
Emacsとともに配布されて、Emacsにより呼び出されることを意図したプログラムを含むディレクトリーの名前(文字列)。プログラムmovemail
はそのようなプログラムの例であり、Rmailはinboxから新しいメールを読み込むためにこのプログラムを使用する。
この変数の値はサブプロセス内で実行するためのプログラムを検索するためのディレクトリーのリスト。要素はそれぞれディレクトリーの名前(文字列)、またはnil
のいずれか。nil
はデフォルトディレクトリー(default-directory
の値)を意味する。この検索の詳細はexecutable-findを参照のこと。
exec-path
の値は、program引数が絶対ファイル名でないときにcall-process
とstart-process
により使用される。
一般的にはexec-path
を直接変更するべきではない。かわりにEmacs起動前に環境変数PATH
が適切にセットされているか確認すること。PATH
とは独立にexec-path
の変更を試みると混乱した結果へと導かれ得る。
この関数は変数exec-path
の拡張である。default-directory
がリモートパスを示す場合には、この関数は対応するリモートホスト上でプログラム検索に使用するデジレクトリーのリストをリターンする。default-directory
がローカルにあれば、この関数は単に変数exec-path
の値をリターンする。
Emacsディストリビューションの一部であるようなプログラムを開始する際には、実行可能プログラムの名前にたいしてそのシステムで課せられた制限にしたがうために、プログラムがリネームされる可能性を考慮する必要があるかもしれません。
たとえばctags
ではなくctags-program-name
の値を指定してプログラムを開始する必要があるかもしれないということです。同様にmovemail
のかわりにmovemail-program-name
、同じことがetags
、hexl
、emacsclient
、rcs2log
、ebrowse
にも当てはまります。