プロセス
プロセスは実行された独立したプログラムで、プロセスIDによってOSが管理します。プロセスは一般に複数のスレッドからなります。スレッドは、1つのプロセスの中で平行して実行される実行単位です。
WindowsでもUNIXでも複数の作業を同時に行うとき、複数のプロセスまたはスレッドを使います。プロセスは独立したプログラムなので、エラーなどであるプロセスが例外を発生しても、他のプロセスは一般には影響を受けません。一方、スレッドは1つのプロセス内の実行単位であるため、あるスレッドが例外を発生すると、影響を受けることが多くなります。
これだけだと、プロセスの方が有利なように見えますが、一般にプロセスの作成(起動)には時間がかかり、リソースも多く消費します。
プロセスの作成
プロセス管理はosモジュールでサポートされます。プロセスの作成(起動)のための関数は多数用意されていて、ケースバイケースで利用できます。
os.system(command)
この関数はサブシェル(Windowsで言えばCommandプロンプト)からコマンドを起動します。
例
import os
os.system("notepad.exe")
os.spawn..(..)
この関数にはいくつかのバリエーションがあります。引数はバリエーションにもよりますが、実行モード(mode)、パス(path)、引数(args)、環境変数(env)などを取ります。そのため、上のsystemより細かな指定をしてプロセスを起動できます。
例
import os
path = 'c:/windows/notepad.exe'
args = 'c:/windows/notepad.exe', 'c:/config.sys']
os.spawnv(os.P_WAIT, path, args)
argsはC言語のmain関数のargvと同じように最初の要素がコマンド名(パス名)です。このため、上の例ではargsの最初に'c:/windows/notepad.exe'を指定しています。
os.exec..()
この関数もspawn..と同じようにいくつかのバリエーションがあります。spawn..ではプロセスのモードを設定できましたが、exec..ではそれができません。exec..もspawn..同様、argsの最初の要素はコマンド名でなければなりません。
例
import os
os.execl('c:/windows/notepad.exe', 'c:/windows/notepad.exe', 'c:/config.sys')