二重起動防止したいときにシェルのps
コマンドからgrep -v
してPIDを除外しても、うまくいかないことがあるよという話
ps -ef | grep ${MyProcName} | grep -v ${MyPid}
これをやるとps
のプロセスからフォークした子プロセスが見えることがある
模様。パイプのタイミングによって見えたり見えなかったりする
先に起動している同名のプロセスがあったら終了なんていうものに組み込んだりするとマズイ
なので仕方なく、
ps -ef >${TmpDir}/${MyPid}
みたいな一時ファイルに退避させて
awk -v pid=${MyPid} -v pname=${MyProcName} '$2 != pid && $8 == pname { print $2}' ${TmpDir}/${MyPid}
のようにしてPid取れたら多重起動、なければ自プロセスだけと判断するようにした方がいい
結局これもps
のタイミング云々では多重起動を許してしまうが、それと上は別の問題