双进程互相保活-flock实现
2021/5/16 7:30:14
本文主要是介绍双进程互相保活-flock实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
进程保活是一种恶意软件的常用手段
这里介绍一种利用文件系统锁机制来进行保活的方法
原理:
1、文件系统互斥锁只能被同一个进程持有,其他进程try lock时会阻塞
2、进程退出时,会自动释放其持有的文件锁
A进程创建文件file1,lock住,然后try lock file2,如果成功,说明B进程已死,拉起,重新try lock
B进程创建文件file2,lock住,然后try lock file1,如果成功,说明A进程已死,拉起,重新try lock
实现效果
还有BUG,待修改
实现源码(很挫,待修改)
#include <stdio.h> #include <sys/file.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <string.h> int main(int argc, char* argv[]) { printf("%c: start to run\n", argv[1][4]); int fd_self = open(argv[1], O_RDONLY); if (fd_self < 0) { printf("Error @ open %s: %d(%s)\n", argv[1], errno, strerror(errno)); } else { printf("%c: open %s success!\n", argv[1][4], argv[1]); } flock(fd_self, LOCK_EX); printf("%c: Lock %s success!\n", argv[1][4], argv[1]); sleep(10); int fd = open(argv[2], O_RDONLY); if (fd < 0) { printf("Error @ open %s: %d(%s)\n", argv[2], errno, strerror(errno)); } else { printf("%c: open %s sucess!\n", argv[1][4], argv[2]); } while (1) { printf("%c: try to lock %s...\n", argv[1][4], argv[2]); flock(fd, LOCK_EX); printf("%c: My child has been killed! Save it!\n", argv[1][4]); flock(fd, LOCK_UN); char str[256] = {""}; strcat(str, "./process "); strcat(str, argv[2]); strcat(str, " "); strcat(str, argv[1]); strcat(str, " &"); system(str); sleep(3); } }
这篇关于双进程互相保活-flock实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享
- 2024-07-04make后如何升级ssh-icode9专业技术文章分享
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享