在这种情况下,我从init.d服务启动virtualenv python脚本。每次I stop
,一个进程就变成“孤儿”。我认为kill
-ing主进程会杀死所有的孩子。它确实会杀死孩子,但不会复发。让我给你看看:
我做了/etc/init.d/bit2euro
,这些过程开始了:
➜ ~ sudo /etc/init.d/bit2euro start
Starting bit2euro
➜ ~ ps -eaf|grep python
root 380 1 0 09:57 pts/0 00:00:00 sudo -u bit2euro venv/bin/python run_frontend.py
bit2euro 384 380 9 09:57 pts/0 00:00:00 venv/bin/python run_frontend.py
bit2euro 393 384 12 09:57 pts/0 00:00:00 /var/www/bit2euro/79/venv/bin/python run_frontend.py
dennis 400 32021 0 09:57 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn python
➜ ~
现在当我/etc/init.d/bit2euro stop
:
➜ ~ sudo /etc/init.d/bit2euro stop
Stopping bit2euro...
Stopped
➜ ~ ps -eaf|grep python
bit2euro 32580 1 0 09:47 pts/0 00:00:02 /var/www/bit2euro/79/venv/bin/python run_frontend.py
dennis 32745 32021 0 09:55 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn python
➜ ~
也就是说进程32580没有被终止
这是启动它的init
脚本的一部分:
echo "Starting $name"
cd "$dir"
if [ -z "$user" ]; then
sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
else
sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
fi
echo $! > "$pid_file"
if ! is_running; then
echo "Unable to start, see $stdout_log and $stderr_log"
exit 1
fi
这是停止部分:
echo -n "Stopping $name.."
kill `get_pid`
for i in {1..10}
do
if ! is_running; then
break
fi
echo -n "."
sleep 1
done
echo
if is_running; then
echo "Not stopped; may still be shutting down or shutdown may have failed"
exit 1
else
echo "Stopped"
if [ -f "$pid_file" ]; then
rm "$pid_file"
fi
fi
我知道为什么,但不知道如何修复它,使这个进程也被杀死,或者如何防止这个分叉从一开始就发生
目前没有回答
相关问题 更多 >
编程相关推荐