领导安排了一个重要且紧急工作。其中一个要点,就是保证进程只有一个。而使用者可以运行多个实例。所以唯一办法就是在程序中互斥。怎么互斥?
互斥锁。
网络端口。
文件锁。
考虑到进程会崩溃,需要再启动,所以互斥锁方案不能用。网络端口绑定可以使用,文件锁也可以。考虑到私密性,吾决定使用文件锁。
代码如下:
#define LOCK_FILE "./process.lock"
bool isRunningNow()
{
int fd = open(LOCK_FILE, O_RDONLY | O_CREAT, 0644);
if (fd < 0)
{
return false;
}
//测试互斥锁定区域
return (lockf(fd, F_TLOCK, 0) == 0);
}