プログラムの終了時に子プロセスを強制終了する機能があります。
class MySingleton:
def __init__(self):
import atexit
atexit.register(self.stop)
def stop(self):
os.kill(self.sel_server_pid, signal.SIGTERM)
ただし、この関数が呼び出されるとエラー メッセージが表示されます。
Traceback (most recent call last):
File "/usr/lib/python2.5/atexit.py", line 24, in _run_exitfuncs
func(*targs, **kargs)
File "/home/commando/Development/Diploma/streaminatr/stream/selenium_tests.py", line 66, in stop
os.kill(self.sel_server_pid, signal.SIGTERM)
AttributeError: 'NoneType' object has no attribute 'kill'
os
とsignal
モジュールatexit
が呼び出される前にアンロードされるようです。それらを再インポートすると問題は解決しますが、この動作は奇妙に思えます。これらのモジュールはハンドラーを登録する前にインポートされるのに、なぜ自分の終了ハンドラーが実行される前にアンロードされるのでしょうか?