2012-05-21 10 views
9

ちょうど誰かが私を助けてくれるのだろうかと思っています。私が抱えている問題は、os.fork()がいくつかの情報を取得してファイルに送ることですが、フォークプロセスが動作していないかどうかを確認することです。fork()プロセスが終了したかどうかを確認するPython

import sys 
import time 
import os 
import re 


ADDRESS = argv[1] 
sendBytes = argv[2] 


proID2 = os.fork() 
if proID2 == 0: 
    os.system('ping -c 20 ' + ADDRESS + ' > testStuff2.txt') 
    os._exit(0) 

print proID2 

finn = True 
while finn == True: 
time.sleep(1) 
finn = os.path.exists("/proc/" + str(proID2)) 
print os.path.exists("/proc/" + str(proID2)) 
print 'eeup out of it ' + str(proID2) 

os.path.exists()は、使用するのが適切でない可能性があります。

ありがとうございました。

+1

/proc/### /の存在を確認するのは良い解決策ではありません。 PIDがどのように問題になるかは定義されていません。あなたの子供が終了した後、次のプロセスが開始されました(あなたのアプリケーションから完全に独立しているかもしれません)*同じPIDを得ることができます。典型的には、それらはターンアラウンドで発行されるため、現在のカーネルではソリューションが常に最もよく機能しますが、将来のカーネルバージョンやコンピュータをスリープモードにするなどの特別な場合や、ネットワークの遅れや応答しないサーバーなどのために、アプリケーションがかなりの時間停止しています。 – Alfe

答えて

12

子プロセスが終了するのを待つには、os.waitXXX()のいずれかの関数(os.waitpid()など)を使用します。この方法は信頼性が高い。ボーナスとして、それはあなたにステータス情報を与えるでしょう。

8

os.fork()os.wait()を使用することもできますが(例については下記を参照)、subprocessモジュールの方法を使用する方がよいでしょう。

import os, sys 

child_pid = os.fork() 
if child_pid == 0: 
    # child process 
    os.system('ping -c 20 www.google.com >/tmp/ping.out') 
    sys.exit(0) 

print "In the parent, child pid is %d" % child_pid 
#pid, status = os.wait() 
pid, status = os.waitpid(child_pid, 0) 
print "wait returned, pid = %d, status = %d" % (pid, status) 
関連する問題