Python/System Signals: Difference between revisions
< Python
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 20: | Line 20: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
main() | main() | ||
</source> | |||
== Daemon == | |||
<source lang="python3"> | |||
import os | |||
import signal | |||
import time | |||
def daemon(): | |||
close_requested = False | |||
def on_quit(signum, frame): | |||
nonlocal close_requested | |||
filepath = os.path.expanduser('~/daemon_test.txt') | |||
with open(filepath, 'a') as f: | |||
msg = 'Daemon(%d) closed by signal %d\n' % (os.getpid(), signum) | |||
f.write(msg) | |||
close_requested = True | |||
focused_signals = [ | |||
signal.SIGHUP, # 1 | |||
signal.SIGINT, # 2 | |||
signal.SIGQUIT, # 3 | |||
signal.SIGABRT, # 6 | |||
signal.SIGTERM # 15 | |||
] | |||
for sig in (focused_signals): | |||
signal.signal(sig, on_quit) | |||
while not close_requested: | |||
time.sleep(1) | |||
if __name__ == '__main__': | |||
if os.fork() == 0: | |||
daemon() | |||
</source> | </source> | ||
Revision as of 02:21, 12 September 2019
Gracefully close a process by signal
import signal
def main():
close_requested = False
def on_close(signum, frame):
nonlocal close_requested
close_requested = True
for signum in (signal.SIGHUP, signal.SIGINT, signal.SIGTERM):
signal.signal(signum, on_close)
while not close_requested:
# TODO
time.sleep(1)
if __name__ == '__main__':
main()
Daemon
import os
import signal
import time
def daemon():
close_requested = False
def on_quit(signum, frame):
nonlocal close_requested
filepath = os.path.expanduser('~/daemon_test.txt')
with open(filepath, 'a') as f:
msg = 'Daemon(%d) closed by signal %d\n' % (os.getpid(), signum)
f.write(msg)
close_requested = True
focused_signals = [
signal.SIGHUP, # 1
signal.SIGINT, # 2
signal.SIGQUIT, # 3
signal.SIGABRT, # 6
signal.SIGTERM # 15
]
for sig in (focused_signals):
signal.signal(sig, on_quit)
while not close_requested:
time.sleep(1)
if __name__ == '__main__':
if os.fork() == 0:
daemon()