这通常是如何实现的,一个正在运行的进程将其PID存储到一个文件中。
然后您可以实现另一个脚本(或者现有脚本的一个参数—就像下面的示例一样),从文件中读取PID并终止该进程。
你甚至可以
make the termination graceful
.
import signal
import time
import os
import sys
pidfile = "sftp.pid"
if (len(sys.argv) > 1) and (sys.argv[1] == "stop"):
if os.path.isfile(pidfile):
with open(pidfile, "r") as f:
pid = int(f.read())
print("stopping sftp process {0}".format(pid))
os.kill(pid, signal.SIGTERM)
else:
print("sftp is not running")
sys.exit()
class GracefulKiller:
kill_now = False
def __init__(self):
signal.signal(signal.SIGINT, self.exit_gracefully)
signal.signal(signal.SIGTERM, self.exit_gracefully)
def exit_gracefully(self,signum, frame):
self.kill_now = True
if __name__ == '__main__':
pid = os.getpid()
print("sftp is starting with pid {0}".format(str(pid)))
with open(pidfile, "w") as f:
f.write(str(pid))
killer = GracefulKiller()
while True:
time.sleep(1)
print("doing something in a loop ...")
if killer.kill_now:
break
print "End of the program. I was killed gracefully :)"
os.remove(pidfile)