Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Daemonize
Sergey Arkhipov
May 20, 2017
Programming
0
150
Daemonize
A little tech talk for rannts#16 meetup on correct daemonization in UNIXes before systed era
Sergey Arkhipov
May 20, 2017
Tweet
Share
More Decks by Sergey Arkhipov
See All by Sergey Arkhipov
Fingerprinting
9seconds
0
86
Concurrency Models
9seconds
0
62
Probablistic Data Structures
9seconds
0
150
Own Mustache
9seconds
0
140
Stuff That Works
9seconds
0
180
Evidence
9seconds
0
54
Redneck Monads
9seconds
1
66
Latency
9seconds
0
61
Oh Blindfold Russia!
9seconds
0
180
Other Decks in Programming
See All in Programming
2022年のモダンCSS改
tonkotsuboy_com
24
17k
Agile Tech EXPO_2022/カケハシ
kakehashi
0
110
段階的な技術的負債の解消方法.pdf
ko2ic
2
960
VIMRC 2022
achimnol
0
140
Regular expressions basics/正規表現の基本
kishikawakatsumi
6
270
Google IO 2022 社内LT会 / What's new in Android development tools
shingo_kobayashi
1
430
10歳の minne から、これから長く続くプロダクトを作るすべての人へ
tsumichan
9
3.7k
このタイミングで知っておきたい 開発生産性の高いエンジニア組織の特徴とは / dev-sumi-20220721-productivity-features
findyinc
7
2.7k
WindowsコンテナDojo:第6回 Red Hat OpenShift入門
oniak3ibm
PRO
0
180
パラメタライズドテスト
ledsun
0
220
ECサイトの脆弱性診断をいい感じにやりたい/OWASPKansaiNight_LT1_220727
owaspkansai
0
300
Windows コンテナ Dojo 第5回 OpenShift で学ぶ Kubernetes 入門
oniak3ibm
PRO
0
200
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
638
53k
Creatively Recalculating Your Daily Design Routine
revolveconf
207
10k
Robots, Beer and Maslow
schacon
152
7.2k
How To Stay Up To Date on Web Technology
chriscoyier
780
250k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
12
940
Intergalactic Javascript Robots from Outer Space
tanoku
260
25k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
223
49k
Designing on Purpose - Digital PM Summit 2013
jponch
106
5.7k
Navigating Team Friction
lara
175
11k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
Art Directing for the Web. Five minutes with CSS Template Areas
malarkey
196
9.5k
YesSQL, Process and Tooling at Scale
rocio
157
12k
Transcript
Правильная демонизация Сергей Архипов, 2017
Чего хотим #!/usr/bin/env python3 # -*- coding: utf-8 -*- import
contextlib import syslog import time @contextlib.contextmanager def daemonize(): yield if __name__ == "__main__": with daemonize(): syslog.openlog(facility=syslog.LOG_USER) syslog.syslog("Daemon start.") time.sleep(10) syslog.syslog("Daemon done.")
Подход 1 def daemonize(): first_pid = os.fork() if first_pid: sys.exit(0)
yield
Подход 2 def daemonize(): first_pid = os.fork() if first_pid: sys.exit(0)
syslog.syslog("Session={0}, Group={1}, Parent={2}, Self={3}".format( os.getsid(0), os.getpgid(0), os.getppid(), os.getpid() )) yield … Session=7087, Group=14115, Parent=14115, Self=14151 … Daemon start. … Daemon done.
Подход 2 def daemonize(): first_pid = os.fork() if first_pid: sys.exit(0)
syslog.syslog("Session={0}, Group={1}, Parent={2}, Self={3}".format( os.getsid(0), os.getpgid(0), os.getppid(), os.getpid() )) os.setsid() syslog.syslog("Session={0}, Group={1}, Parent={2}, Self={3}".format( os.getsid(0), os.getpgid(0), os.getppid(), os.getpid() )) yield … Session=7087, Group=17364, Parent=17364, Self=17400 … Session=17400, Group=17400, Parent=17364, Self=17400 … Daemon start … Daemon done.
Подход 3 def daemonize(): if os.fork(): sys.exit(0) os.setsid() if os.fork():
sys.exit(0) yield
Подход 4 def daemonize(): if os.fork(): sys.exit(0) os.setsid() if os.fork():
sys.exit(0) os.chdir("/") os.umask(0o002) yield
Подход 5 def daemonize(): if os.fork(): sys.exit(0) os.setsid() if os.fork():
sys.exit(0) os.chdir("/") os.umask(0o002) sys.stdout.flush() sys.stderr.flush() _, max_fds = resource.getrlimit(resource.RLIMIT_NOFILE) max_fds = max_fds if max_fds!=resource.RLIM_INFINITY else 1024 os.closerange(0, max_fds) sys.stdout = sys.stderr = open(os.devnull, "w") sys.stdin = open(os.devnull, "r") yield
Подход 6 def daemonize(): if os.getppid() != 1: return if
os.fork(): sys.exit(0) os.setsid() if os.fork(): sys.exit(0) os.chdir("/") os.umask(0o002) sys.stdout.flush() sys.stderr.flush() _, max_fds = resource.getrlimit(resource.RLIMIT_NOFILE) max_fds = max_fds if max_fds != resource.RLIM_INFINITY else 1024 os.closerange(0, max_fds) sys.stdout = sys.stderr = open(os.devnull, "w") sys.stdin = open(os.devnull, "r") yield
def daemonize(): if os.getppid() != 1: return if os.fork(): sys.exit(0)
os.setsid() if os.fork(): sys.exit(0) os.chdir("/") os.umask(0o002) sys.stdout.flush() sys.stderr.flush() _, max_fds = resource.getrlimit(resource.RLIMIT_NOFILE) max_fds = max_fds if max_fds != resource.RLIM_INFINITY else 1024 os.closerange(0, max_fds) sys.stdout = sys.stderr = open(os.devnull, "w") sys.stdin = open(os.devnull, "r") yield