用C语言实现一个Linux进程myapp,要求myapp在Linux中只能同时启动一个,给出具体的代码实现
时间: 2024-03-16 10:45:08 浏览: 63
实现一个只能同时启动一个的进程,可以用文件锁(File Lock)来实现。具体代码实现如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/file.h>
#define LOCKFILE "/var/run/myapp.pid"
int main() {
int fd;
char buf[16];
fd = open(LOCKFILE, O_RDWR | O_CREAT, 0640);
if (fd < 0) {
perror("open");
exit(1);
}
if (flock(fd, LOCK_EX | LOCK_NB) < 0) {
printf("myapp is already running\n");
exit(1);
}
sprintf(buf, "%d\n", getpid());
if (write(fd, buf, strlen(buf)) != strlen(buf)) {
perror("write");
exit(1);
}
// do something
flock(fd, LOCK_UN);
close(fd);
unlink(LOCKFILE);
return 0;
}
```
以上代码中,程序首先打开一个文件 `/var/run/myapp.pid`,并尝试获取一个排他锁(LOCK_EX),如果获取成功,则表示myapp进程还没有被启动,可以继续执行下面的代码。接着,程序将当前进程的PID写入到文件中,以便其他进程检测到myapp进程正在运行。在程序执行完毕后,程序释放文件锁并删除文件。这样,就可以确保myapp进程在Linux中只能同时启动一个了。
阅读全文