プロセス


プロセスは実行された独立したプログラムで、プロセス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')