在Linux下防止某个程序被运行两次的方法
浏览:58日期:2022-08-01
;通过文件锁来实现,在程序运行的一开始,检查某文件是否存在,如果存在则说明改程序已经在运行了,如果不存在则利用open语句创建该文件,程序退出时关闭并删除此文件。 static char file_lock[sizeof(ctl_addr.sun_path)] = /var/run/file.pid;static bool file_lock_created = FALSE;static intcreate_lock(void){ int fd = open(file_lock, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, S_IRUSR | S_IRGRP | S_IROTH); if (fd < 0) { if (errno == EEXIST) { fprintf(stderr, 'file: lock file '%s' already existsn', file_lock); exit_file(10); } else { fprintf(stderr, 'file: unable to create lock file '%s' (%d %s)n' , file_lock, errno, strerror(errno)); exit_file(1); } } file_lock_created = TRUE; return fd;}static boolfill_lock(int lockfd){ char buf[30]; /* holds 'n' */ pid_t pid; int len; pid = getpid(); len = snprintf(buf, sizeof(buf), '%un', (unsigned int) pid); bool ok = len > 0 && write(lockfd, buf, len) == len; close(lockfd); return ok;}static voiddelete_lock(void){ if (file_lock_created) { //delete_ctl_socket(); unlink(file_lock); /* is noting failure useful? */ }}
标签:
Linux系统
相关文章:1. 三星推出512GB CXL内存扩展器2.0 可为CPU增加16TB内存2. 机械师F117-bpro游戏本:十代i7+gtx1650ti 到手价6499元3. 英特尔确认W790芯片组 将支持新一代至强工作站处理器4. AMD锐龙线程撕裂者pro出四款 64核3995WX售价4万多5. 360数科宣布正式加入FinOps阵营 finops是什么6. AMD发布Radeon20.10.1版显卡驱动:修复《原神》问题7. 苹果macbook pro屏幕背光问题 免费换屏时间延长8. 宏碁Swift X 笔记本搭载锐龙5000系处理器 价格6499元9. 宏碁最新轻薄笔记本Swift、Spin和Aspire发布 区别介绍10. CPU的几核几线程是什么意思?CPU核数是什么?

