Linux 单例程序
在 Linux 系统中,有时你希望某个程序在同一时间只能运行一个实例,避免多个进程同时执行带来的资源冲突或逻辑错误。本文将介绍实现程序单实例运行的常见方法,包括:
- 使用文件锁(
flock
) - 使用进程 ID 文件(PID 文件)
- 使用
ps
命令检测已有实例
通过这些方法,你可以确保程序在系统中只运行一个实例。
使用文件锁(C 语言)
文件锁是一种常用的进程间同步机制,可以用来防止多个实例同时运行。
文件锁示例(使用 flock)
#include <sys/file.h>
#include <errno.h>
int pid_file = open("/var/run/whatever.pid", O_CREAT | O_RDWR, 0666);
int rc = flock(pid_file, LOCK_EX | LOCK_NB);
if(rc) {
if(EWOULDBLOCK == errno)
; // another instance is running
}
else {
// this is the first instance
}