2017-02-08 18 views
0

単体テストでは少し問題があります。ここではセットアップでプロセスが実行されているかどうかを確認し、そうでない場合はPopenを使用して実行します。Popenを呼び出してKill()を呼び出すときのゾンビプロセス

teardown()私はmyprocess.kill()を呼び出します。そのため、テストごとにクリーンな状態が得られます。

これは初回のみ正常に動作します。そのプロセスでkillコマンドを呼び出すと、ゾンビ状態(Z +)になります。これは、Popenがテストケースのセットアップ段階に由来しているので、これを取り除くために、私はユニットテストクラスもまた削除する必要があることを意味します。

これを回避する方法はありますか?私はpytestを使ってテストを呼び出し、ユニットテストpythonスクリプトをパラメータとして渡します。

class Mytest(unittest.TestCase) 

    running_process = ""  

    def setUp(self): 
     command = "~/myprocess" 
     self.running_process = Popen(command, shell=True, stdout=PIPE, stderr=STDOUT) 

    def test_tryprocess(self): 
     #do something 

    def test_tryprocess_again(self): 
     # do something else 

    def tearDown(self): 
     self.running_process.kill() 

答えて

1

犯人を見つけました:私がPopenを呼ぶとき、私はまたshell = Trueと呼んでいます。これはプロセスとの結合を作成するので、シェルがも殺されるまでハングします。

問題を解決するには、shell=Trueを削除しても問題ありません。

関連する問題