今日は1つ原稿が仕上がった.
締め切りはいつだっただろうか.はるか以前だ.
最初の締め切りは去年のいつかだったか.

完全に終わったわけではないが一旦編集者に渡すことになるので,
校正が返ってくるまでは手を離れる.
90ページ弱の文章を書いたのは博士論文以来か.

ところがまた今月中旬と月末に締め切りのものが・・・




プログラム間通信をするための勉強途中である.
以下は,Python でプロセスのコピーを作って(fork して)処理を分ける方法のメモを残す.


===プログラム1=== ===プログラム2===
import os
import sys

pid = os.fork()

if pid == 0:
for i in range(1,5):
print " child %s/4 " % i
for k in range(10000000):
1

print " child end"
sys.exit()

else:
for i in range(1,4):
print "parent %s/3 " % i
for k in range(4000000):
1

print "parent is wating"
os.wait()
print "parent exit"
 
import os
import sys

pid = os.fork()

if pid == 0:
for i in range(1,5):
print " child %s/4 " % i
for k in range(10000000):
1

print " child end"
sys.exit()

else:
for i in range(1,4):
print "parent %s/3 " % i
for k in range(4000000):
1

print "parent close child process"
os.kill(pid, 9)
print "parent exit"


実行結果は以下のようになる.
parent 1/3 
child 1/4
parent 2/3
parent 3/3
child 2/4
parent is wating
child 3/4
child 4/4
child end
parent exit

 
parent 1/3 
child 1/4
parent 2/3
parent 3/3
child 2/4
parent close child process
parent exit


fork の動作とプログラム,実行する前はよく理解できなかったが,わかると面白い.

fork を実行する事により,そのプロセスのコピーができる.
複製された方が「子」になる.作った方は「親」である.

fork の返り値が子プロセス側では 0 であり,親プロセス側では子プロセスの pid になる.
これを利用して,親と子で処理内容を分ける.

if pid == 0:
...
else:
...

と書くと,子側では最初の if の中身が実行され,親側では else の中身が実行される.

親側は子プロセスの終了を待つか,子プロセスを強制的に閉じるか,などのアクションを書ける.




やじるし プログラム間通信関連メモの目次