セグフォルトの優雅な取り扱い

linux python scripting segmentation-fault
セグフォルトの優雅な取り扱い

LinuxでクローズドソースAPIを使用するプログラムをPythonで書いています。 APIは時々動作し、時にはセグメンテーション違反が発生します-私のプログラムもクラッシュします。 ただし、プログラムが10秒間実行されると、セグメンテーション違反の可能性があり、永久に実行される時点を過ぎます(エラーは最初にのみ発生します)。

次のようなスクリプトが必要だと思います。

__
私のPythonプログラムを開始し、

10秒待ちます

Pythonがまだ実行中かどうかを確認します

実行中の場合、スクリプトはpythonを終了せずに終了するはずです

Pythonが実行されていない場合は、繰り返します。
__

そのようなプログラムは可能ですか? セグメンテーション違反はスクリプトも殺しますか?

  8  0


ベストアンサー

はい、そのようなプログラムは完全に可能です。 これら2つのプログラムを別々のプロセスで実行する必要があります-SEGFAULTは、それが発生したプロセスのみを強制終了します。

Linuxを使用している場合、必要に応じてbashまたはpythonを使用できます。 別のプロセスで失敗しているスクリプトを開始するだけです。 Pythonのコードは次のようになります。

import subprocess
import time

start = time.clock()
ret = subprocess.call(['myprog', 'myarg0', ...])
end = time.clock()
if end - start > threshold:
    restart()

また、そのようなプロセスからの戻りコードは、SEGFAULTが原因で終了したときに何らかの意味のある値を持っている可能性があります。

2


http://docs.python.org/library/subprocess.html [子プロセス]内でこのバグのあるAPIへの呼び出しを分離できますか? そのようにして、終了ステータスを確認し、「Try …​ キャッチ

1


タイトルとURLをコピーしました