「start-stop-daemon」が2つのプロセスを生成するのはなぜですか?

「start-stop-daemon」が2つのプロセスを生成するのはなぜですか?

これは私のSysVinitファイルの一部です。

NAME="flask-daemon"
PIDFILE="/var/run/"$NAME".pid"
DAEMON="/home/ubuntu/flask/run.py"
DAEMON_USER=root

f_start() {
    echo -e "\nStarting : $NAME"
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --exec $DAEMON
}

エラーがどこにあるかを知っている人はいますか?

また、恐ろしいことは、この場合、1つのプロセスのPIDだけがpidファイルに書き込むことです。これにより、/etc/init.d/flask-daemon stopファイルを書き込んでいると思われるPIDに関連するプロセスのみが終了します。

プロセス(なぜ2つの個人ですか?):

ps aux | grep run.py
root      3591  3.0  1.7 132700 17460 ?        S    19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3595  4.5  1.7 213144 18080 ?        Sl   19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3602  0.0  0.0  10460   948 pts/0    S+   19:27   0:00 grep --color=auto run.py

PIDファイル:

$ cat /var/run/flask-daemon.pid
3591

1つのプロセスのみが終了しました。

ps aux | grep run.py
root      3595  0.3  1.7 213144 18080 ?        Sl   19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3613  0.0  0.0  10460   948 pts/0    S+   19:27   0:00 grep --color=auto run.py

観察: >私も試してみました--startasが、2つのプロセスが作成され、最悪でした。/var/run/flask-daemon.pyデーモンプロセスのプロセスを除く他のプロセスのPIDを記録します。

答え1

デーモンはデーモンモードで実行されているため、起動時に独自のコピーを作成します。

私はこれがps出力のSTAT列の「Sl」の「l」部分が意味するものかもしれないと思います。

私は最近Python-daemonをたくさん使用していますが、スクリプトがそれを使用している場合は、デーモンコンテキストのコンストラクタからプロセスを分離するかどうかを知ることができます。そうしないと言えば金賞添化でしょう。

-または-

start-stop-daemon を使用せず、detach_process フラグを使用して systemd サービスを生成します。

-または-

プロセスを分離するには、両方を実行してプロセスに通知します。

関連情報