我有一个线程服务器用Python写的,我开始使用下面的shell脚本:
#!/bin/bash
base_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
public_dns=$(curl -s http://169.254.169.254/latest/meta-data/public-hostname)
echo $public_dns > "$base_path/client/address"
cd "$base_path/server"
python "server.py" &
echo $! > "$base_path/server_pid"
echo "Server running"
我呼应PID到一个文件,这样就可以关闭使用另一个shell脚本的服务器:
#!/bin/bash
base_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
kill -9 `cat "$base_path/server_pid"`
rm "$base_path/server_pid"
rm "$base_path/client/address"
我知道,但是,这是一个不错的办法考虑服务器有一个具有I / O到网络和硬盘...所以我想做的是有第二个脚本以某种方式与服务器进行交互,并告诉它什么的线程启动关机序列将干净关闭所有线程,关闭和归档日志等。
现在我知道的atexit和我测试了这种方式:
import atexit
def byebye(o):
o.write('stop')
o.flush()
o.close()
o = open('log','w')
o.write('start')
o.flush()
atexit.register(byebye, o)
while True:
pass
但是,当我kill -9
的过程中, byebye()
不开除。 我应该使用一个命令以外的全能kill -9
? 我怎么会去关闭进程?