Linux における常駐プロセスの役割は無視できませんが、そのプロセスの問題点も無視できず、プロセスの起動方法、プロセスの終了方法、プロセスハングアップ後のプロセスの再起動方法などを考慮する必要があります。合理的に設計されています。シェル制御の PHP 常駐プロセスの例を見てみましょう。
##コードをコピーします。コードは次のとおりです。##!/bin/sh
#ファイル名 test.sh#ファイルの場所は絶対的な位置にあり、変更されません。実行ディレクトリを使用します。
cd $(cd "$(dirname "$0")";pwd)
readonly path=$(pwd)/
file=$1;
runfile="${path }data/${file} .run"
diefile="${path}data/${file}.die"
readonly file="${path}${file}.php"
if [ ! -f "$ file" ]; then
echo "存在するファイルを選択してください"
elif [ ! -f "$runfile" ]; then
# ここで判断します。存在しない場合は、プロセスが存在しないことを意味します。 , 以下のプロセスを開始します
echo $$>${runfile}
while true
do
if [ ! -f $diefile ]; then
diefile ファイルが存在しない場合は、プログラムが実行を継続することを示します。存在しない場合は、else に入り、終了操作を実行します。 runfile と diefile をクリアして終了します。
if rm -rf $runfile && rm -rf $ diefile ; then
exit
fi
fi
else
# ここに存在します Runfile はプロセスの開始を試みるために使用されます
oldpid=`cat $runfile`
newpid= `ps aux | grep "process.sh $1" | grep -v grep | grep "$oldpid" | awk '{print $2}'`
if [[ $oldpid -eq $newpid ]]; then
#実行ファイル内のプロセス番号が実行中のターゲット プロセス番号と一致する場合は、すべて問題ありません^_^
echo "プロセスは現在実行中です"
exit
else
#プロセス番号の場合runfile 内の は実行中のターゲット プロセスと一致しません。プロセスに問題があることを意味します。runfile を直接削除し、実行中のプロセスを終了します
echo "エラー状況。実行プロセスを強制終了し、実行ファイルを削除します"
ps aux | grep "process.sh $1" | grep -v 'grep' | awk '{print $2}' | grep -v $ $ | xargs --no-run-if-empty kill
If [ $? -eq 0]; Then
/data /error
これに制限はありません。ここで説明したいのは、居住者プロセスを実行するこの方法です。番号が強制終了プロセス (つまり、赤い else が実行される場所) と一致しません。「grep -v $$」を実行する必要があります。この機能は、現在実行中のプロセスをフィルタリングして除外することです。そうしないと、それらのプロセスと後続のプロセスが強制終了されます。
もう 1 つの注意点は自動再起動についてです。
自動再起動これは crontab に配置して、時々実行できます。特定の状況はケースバイケースで処理されます。 。
コードをコピーします コードは次のとおりです:
crontab -e
#現在のユーザー スケジュールを開いてモードを追加します
#スケジュールには 5 つのアスタリスク、f1、f2、 f3、f4、f5、
# ここで、f1 は分を表し、f2 は時を表し、f3 は日を表し、f4 は月を表し、f5 は曜日を表します。
#* は、毎分/時/日/月/日を表します今週の */n は、n 分/時間に 1 回実行することを意味します/....
*/2 * * * * /root/test.sh
#2 分に 1 回実行
以上で完全な常駐プロセス関数が完成しましたので、プロセスを終了したい場合は該当ディレクトリ内の ${diefile} をタッチするだけです。
以上がLinuxデーモンプロセスのサンプルコード分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。