如何防止病毒分叉?

2024-10-03 21:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

在这种情况下,我从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

我知道为什么,但不知道如何修复它,使这个进程也被杀死,或者如何防止这个分叉从一开始就发生


Tags: echologifvenv进程initdiretc