セッションの終了に反応するPythonデーモンを書き込もうとしています(つまり、bashが終了したためにTTYが閉じられています)。私が理解していることから、SIGHUPはある時点でプロセスに送られなければなりません(私は詳細をあいまいにしています)。しかし、これまで何も捕らえていません。その後、私のSSHセッションを閉じて、私は、サーバーにSSH、そこにスクリプトを起動します。セッションがPythonで終了したときに信号を取得する
#!/usr/bin/env python
import os
import sys
import signal
import time
def log_to_disk(signum, frame):
with open("/tmp/SIGNAL", "w") as f:
f.write("Received %d!\n" % signum)
def fork():
try:
pid = os.fork()
if pid > 0:
# Exit parent
print "Parent exiting. Bye!"
sys.exit(0)
except OSError as e:
print "Error while forking! (%s)" % str(e)
sys.exit(1)
fork()
os.chdir('/')
os.setsid()
os.umask(0)
fork() # Second fork.
# Catch ALL the signals just in case.
for i in [x for x in dir(signal) if x.startswith("SIG")]:
try:
signum = getattr(signal, i)
signal.signal(signum, log_to_disk)
except Exception as e:
print "Couldn't handle %s (%s)." % (i, str(e))
while True:
time.sleep(10)
私は何をやってる:
は、ここに私の非機能Pythonの試みです。それで、/tmp/SIGNAL
ファイルが作成されていることを期待してログインしますが、これまでのところ運がありません。 kill
でプロセスに信号を送信するとファイルが表示されるので、これはハンドラの問題ではないと仮定しています。 私はまた、一度だけフォークを試みました、そして/またはchdir/setsid/umask
の部分をコメントアウトしましたが、私はどちらも受け取っていません。 私が検討したもう1つの方法は、一度フォークして、定期的にTTYに書き込もうとしていて、閉じた時点でSIGTTOUを受け取ることを期待しています。
誰でも手伝ってもらえますか?