我目前正在开发一个需要单实例(即限制为1个用户1个进程)的Linux守护程序。有没有更好的方法来实现,而不必使用 getpid()
手动将pid写入 /var/run/ ,然后使用 flock()
进行锁定?
我目前正在开发一个需要单实例(即限制为1个用户1个进程)的Linux守护程序。有没有更好的方法来实现,而不必使用 getpid()
手动将pid写入 /var/run/ ,然后使用 flock()
进行锁定?
我在写的一些initd脚本中使用类似这样的东西。将COMMAND替换为您需要的内容。
PIDFILE=/var/run/service.pid
COMMAND="java -jar start.jar"
$COMMAND > /dev/null 2>&1 &
echo $! > $PIDFILE
根据@dogane的建议进行了编辑,并进行了测试。
只需使用libunique。这是最简单的方法。
只需锁定可执行文件本身。
如果你真的不能使用锁文件,可以使用套接字代替。另一个实例将无法启动,因为地址已经在使用中。