プロセスを生成したり管理するために、以下の関数を利用することができます。
様々な exec*() 関数が、プロセス内にロードされた新たな
プログラムに与えるための引数からなるリストをとります。どの場合でも、
新たなプログラムに渡されるリストの最初の引数は、ユーザがコマンドライン
で入力する引数ではなく、プログラム自身の名前になります。
C プログラマにとっては、これはプログラムの main() に
渡される argv[0]
になります。例えば、
"os.execv('/bin/echo', ['foo', 'bar'])" は、標準出力に
"bar" を出力します; "foo" は無視されたかのように見える
ことでしょう。
) |
3
を返します。
signal.signal() を使って SIGABRT に対する
シグナルハンドラを設定しているプログラムは異なる挙動を示すので
注意してください。
利用できる環境: Unix、Windows。
path, arg0, arg1, ...) |
path, arg0, arg1, ..., env) |
file, arg0, arg1, ...) |
file, arg0, arg1, ..., env) |
path, args) |
path, args, env) |
file, args) |
file, args, env) |
これらの関数はすべて、現在のプロセスを置き換える形で新たな プログラムを実行します; 現在のプロセスは戻り値を返しません。 Unixでは、新たに実行される実行コードは現在のプロセス内に ロードされ、呼び出し側と同じプロセス ID を持つことになります。 エラーは OSError 例外として報告されます。
"l" および "v" のついた exec*() 関数は、コマンドライン引数をどのように渡すかが異なります。 "l" 型は、コードを書くときにパラメタ数が決まっている場合 に、おそらくもっとも簡単に利用できます。個々のパラメタは単に execl*() 関数の追加パラメタとなります。"v" 型は、 パラメタの数が可変の時に便利で、リストかタプルの引数が args パラメタとして渡されます。どちらの場合も、子プロセスに渡す引数は 動作させようとしているコマンドの名前から始めるべきですが、これは 強制ではありません。
末尾近くに "p" をもつ型 (execlp()、 execlpe()、 execvp()、 および execvpe()) は、プログラム file を探すために 環境変数 PATH を利用します。環境変数が (次の段で述べる exec*e() 型関数で) 置き換えられる場合、環境変数は PATH を決定する上の情報源として使われます。 その他の型、execl()、 execle()、 execv()、 および execve() では、実行 コードを探すために PATH を使いません。 path には適切に設定された絶対パスまたは相対パスが 入っていなくてはなりません。
execle()、 execlpe()、 execve()、 および execvpe() (全て末尾に"e" がついていること に注意してください) では、env パラメタは新たなプロセスで利用 される環境変数を定義するためのマップ型でなくてはなりません; execl()、execlp()、 execv()、 および execvp() では、全て新たなプロセスは現在のプロセス の環境を引き継ぎます。利用できる環境: Unix、Windows。
n) |
sys.exit(n)
です。_exit() は通常、 fork() された後の子プロセス
でのみ使われます。
以下の終了コードは必須ではありませんが _exit() と共に使うこと ができます。一般に、 メールサーバの外部コマンド配送プログラムのような、 Python で書かれたシステムプログラムに使います。
) |
0
が返り、
親プロセスでは子プロセスの id が返ります。
利用できる環境: Unix。
) |
(pid, fd)
からなるペアが返り、fd は擬似端末の
マスタ側 (master end) のファイル記述子となります。可搬性のある
アプローチを取るためには、pty モジュールを利用してください。
利用できる環境: いくつかの Unix系。
pid, sig) |
pgid, sig) |
increment) |
op) |
<sys/lock.h>
で定義されています) にはどのセグメントを
ロックするかを指定します。利用できる環境: Unix。
...) |
...) |
...) |
...) |
mode, path, ...) |
mode, path, ..., env) |
mode, file, ...) |
mode, file, ..., env) |
mode, path, args) |
mode, path, args, env) |
mode, file, args) |
mode, file, args, env) |
-signal
が返ります。Windows では、プロセス ID は
実際にはプロセスハンドル値になります。
"l" および "v" のついた spawn*() 関数は、コマンドライン引数をどのように渡すかが異なります。 "l" 型は、コードを書くときにパラメタ数が決まっている場合 に、おそらくもっとも簡単に利用できます。個々のパラメタは単に spawnl*() 関数の追加パラメタとなります。"v" 型は、 パラメタの数が可変の時に便利で、リストかタプルの引数が args パラメタとして渡されます。どちらの場合も、子プロセスに渡す引数は 動作させようとしているコマンドの名前から始まらなくてはなりません。
末尾近くに "p" をもつ型 (spawnlp()、 spawnlpe()、 spawnvp()、 および spawnvpe()) は、プログラム file を探すために 環境変数 PATH を利用します。環境変数が (次の段で述べる spawn*e() 型関数で) 置き換えられる場合、環境変数は PATH を決定する上の情報源として使われます。 その他の型、spawnl()、 spawnle()、 spawnv()、 および spawnve() では、実行 コードを探すために PATH を使いません。 path には適切に設定された絶対パスまたは相対パスが 入っていなくてはなりません。
spawnle()、 spawnlpe()、 spawnve()、 および spawnvpe() (全て末尾に"e" がついていること に注意してください) では、env パラメタは新たなプロセスで利用 される環境変数を定義するためのマップ型でなくてはなりません; spawnl()、spawnlp()、 spawnv()、 および spawnvp() では、全て新たなプロセスは現在のプロセス の環境を引き継ぎます。
例えば、以下の spawnlp() および spawnvpe() 呼び出し:
import os os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null') L = ['cp', 'index.html', '/dev/null'] os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)
は等価です。利用できる環境: Unix、Windows。
spawnlp()、spawnlpe()、 spawnvp() および spawnvpe() は Windows では利用できません。 バージョン 1.6 で 新たに追加 された仕様です。
-signal
を返します。
利用できる環境:
Unix、Windows。
バージョン 1.6 で 新たに追加 された仕様です。
path) |
startfile() は関連付けされたアプリケーションが起動すると 同時に返ります。アプリケーションが閉じるまで待機させるためのオプション はなく、アプリケーションの終了状態を取得する方法もありません。 path 引数は現在のディレクトリからの相対で表します。 絶対パスを利用したいなら、最初の文字はスラッシュ ("/") ではないので注意してください; もし最初の文字がスラッシュ なら、システムの背後にある Win32 ShellExecute() 関数は 動作しません。os.path.normpath() 関数を使って、Win32 用に 正しくコード化されたパスになるようにしてください。 利用できる環境:Windows。 バージョン 2.0 で 新たに追加 された仕様です。
command) |
posix.environ
、 sys.stdin
等に対する変更を行っても、
実行されるコマンドの環境には反映されません。
Unixでは、戻り値はプロセスの終了ステータスで、wait() で定義されている書式にコード化されています。 POSIX は system() 関数の戻り値の意味について定義して いないので、Python の system における戻り値はシステム依存と なることに注意してください。
Windows では、戻り値は command を実行した後にシステムシェルから
返される値で、Windows の環境変数 COMSPEC となります:
command.com ベースのシステム (Windows 95, 98 および ME)
では、この値は常に 0
です; cmd.exe ベースのシステム
(Windows NT, 2000 および XP) では、この値は実行したコマンドの終了
ステータスです; ネイティブでないシェルを使っているシステムについては、
使っているシェルのドキュメントを参照してください。
利用できる環境: Unix、Windows。
) |
) |
pid, options) |
0
にします。利用できる環境: Unix。
pid が 0
よりも大きい場合、 waitpid()
は特定のプロセスのステータス情報を要求します。pid が
0
の場合、現在のプロセスグループ内の任意の子プロセスの状態
に対する要求です。pid が -1
の場合、現在のプロセス
の任意の子プロセスに対する要求です。pid が -1
よりも
小さい場合、プロセスグループ -pid
(すなわち pid の
絶対値) 内の任意のプロセスに対する要求です。
以下の関数はsystem()、 wait()、 あるいはwaitpid() が返すプロセス状態コード を引数にとります。これらの関数はプロセスの配置を決めるために 利用することができます。
status) |
status) |
status) |
status) |
WIFEXITED(status)
が真の場合、exit(2) システム
コールに渡された整数パラメタを返します。そうでない場合、
返される値には意味がありません。
利用できる環境: Unix。
status) |
status) |
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。