Linux进程单例模式运行
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int write_pid(const char* pidFile)
{char str[32] = {0};int fd = open(pidFile,O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);if(fd < 0){ printf("can't open pidFile %s.\n",pidFile);exit(1);} if(lockf(fd, F_TLOCK,0))printf("can't lock pidFile %s.\n",pidFile);exit(0);} sprintf(str,"%d\n",getpid());ssize_t len = strlen(str);if(write(fd,str,len) != len){ printf("can't write pid %s.\n",pidFile);exit(0);} printf("write pid file %s.\n",pidFile);return fd;
}int main()
{int pid_fd = write_pid("server.pid");while(1){ ;}lockf(pid_fd, F_ULOCK,0);close(pid_fd);
}
终端1
[banting@localhost test]$ ls -tlr
-rw-rw-r--. 1 banting banting 834 Jun 30 15:53 test75.cpp
-rwxrwxr-x. 1 banting banting 19760 Jun 30 16:03 test75
[banting@localhost test]$ g++ -g test75.cpp -o test75
[banting@localhost test]$
[banting@localhost test]$ ./test75
write pid file server.pid.
终端2
[banting@localhost test]$ ps -ef |grep test75
banting 519636 596192 99 16:03 pts/38 00:00:38 ./test75
banting 519676 518705 0 16:04 pts/96 00:00:00 grep --color=auto test75
[banting@localhost test]$ cat server.pid
519636
[banting@localhost test]$ ./test75
can't lock pidFile server.pid.
[banting@localhost test]$