MCPcopy
hub / github.com/shadowsocks/shadowsocks / daemon_stop

Function daemon_stop

shadowsocks/daemon.py:134–176  ·  view source on GitHub ↗
(pid_file)

Source from the content-addressed store, hash-verified

132
133
134def daemon_stop(pid_file):
135 import errno
136 try:
137 with open(pid_file) as f:
138 buf = f.read()
139 pid = common.to_str(buf)
140 if not buf:
141 logging.error('not running')
142 except IOError as e:
143 shell.print_exception(e)
144 if e.errno == errno.ENOENT:
145 # always exit 0 if we are sure daemon is not running
146 logging.error('not running')
147 return
148 sys.exit(1)
149 pid = int(pid)
150 if pid > 0:
151 try:
152 os.kill(pid, signal.SIGTERM)
153 except OSError as e:
154 if e.errno == errno.ESRCH:
155 logging.error('not running')
156 # always exit 0 if we are sure daemon is not running
157 return
158 shell.print_exception(e)
159 sys.exit(1)
160 else:
161 logging.error('pid is not positive: %d', pid)
162
163 # sleep for maximum 10s
164 for i in range(0, 200):
165 try:
166 # query for the pid
167 os.kill(pid, 0)
168 except OSError as e:
169 if e.errno == errno.ESRCH:
170 break
171 time.sleep(0.05)
172 else:
173 logging.error('timed out when stopping pid %d', pid)
174 sys.exit(1)
175 print('stopped')
176 os.unlink(pid_file)
177
178
179def set_user(username):

Callers 1

daemon_execFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected