通用的单进程执行
之前写过一个基于文件锁的单进程执行,但由于JDK8中存在bug,因此又设计了一种通用的单进程执行实现方法.
流程如下
,这个文件名可以是固定的,也可以根据执行文件名来
shell的单进程实现如下
function check(){
local pidFile="$0.pid"
local pid=`test -e $pidFile && cat $pidFile`
if [ "$pid" != "" ]
then
local exist=`ps -ef | grep $pid | grep $0 | grep -v grep`
if [ "$exist" != "" ]
then
#writeLog "watch exist"
exit 1
fi
fi
echo $$ > $pidFile
}
其他进程
自行开发的软件进程可以自行实现上述逻辑.
注意点
要保证pid可见,同一个用户的pid是可见的,root则可以看到所有的pid,如需必要可以加上额外的一些判断,例如执行中的进程用户与当前用户是否一致之类的,可以扩展出很多玩法.