非同期プロセスは start-process で作られ、制御はEmacs に戻されます。このプロ セスは(この後) Emacs と同時に走り、(後のセクションで述べる)関数を通し、(互い に)コミュニケートします。
Function: start-process name buffer-name program &rest arguments
この関数は、(新しく)プロセスを作り、そのプロセスでプログラムを起動します。 このプロセスは name を必要に応じて修正したもので名付けられます。バッファ buffer-name は、そのプロセスに対応付けられる(訳注:associated)バッファで す。 program は、起動するプログラムです。
start-process は作成したプロセスを返します。 "プロセスに与えられる名前は、 (プロセスにおいて)一意 (訳注:unique among processes)である" ことが保証さ れます。これはユーザーが与えた名前か、そのプログラムの名前か、一意にするた めに必要であれば、 (`<1>', `<2>' 等をアペンドすることで)修正したものです。
以下の例において、最初のプロセスは起動され 100 秒走り sleep します。一方、 2番目のプロセスは起動され、最初のプロセスが終了する前にバッファ processes.texinfo の終りにディレクトリのリストを挿入し、終了するまで走りま す。最初のプロセスが終了すると、それは Process my-process finished をバッ ファの終りに挿入します。
(start-process "my-process" "foo" "sleep" "100") => #<process my-process>
(start-process "my-process" "ls" "-l" "/user/lewis/bin") => #<process my-process<1>>
---------- Buffer: foo ---------- total 2 lrwxrwxrwx 1 lewis 14 Jul 22 10:12 gnuemacs -> /usr/bin/emacs -rwxrwxrwx 1 lewis 19 Jul 30 21:02 lemon
Process my-process<1> finished
Process my-process finished ---------- Buffer: foo ----------
Variable: process-connection-type
このグローバル変数は、サブプロセスとコミュニケートするのに用いるデバイスの タイプを制御します。 nil の場合パイプを用います。 t の場合 pty を用います (pty がサポートされていない場合、パイプを用います - これは Emacs がコンパ イルされた時に定義されてなくてはいけない Cの定数 HAVE-PYTS で定められま す)。プロセスとその子供(訳注:のプロセス)との間でのジョブコントロールを可 能にするため、(通常) pty のほうが好ましいと言えます。
process-connection-type の値は start-process が呼ばれる時、用いられます。 このため start-process の(ある 1回の)呼び出しにおいてのみこの値を変えたい 場合、let を用いこれを一時的にバインドしなおします。
((let ((process-connection-type nil)) ; パイプを用いる。 (start-process ...))