qemu中daemonize为什么要两次fork
来源:互联网 发布:网络用语y2y是什么意思 编辑:程序博客网 时间:2024/06/05 14:37
函数void os_daemonize(void) 将当前进程变成后台进程即放弃终端。一开始不理解为什么要两次fork,后来查网上资料得知,两次fork是为了防止第一个子进程打开终端。首次fork使父进程退出,子进程继承了父进程的进程组ID,但具有一个新的进程ID,这就保证了子进程不是一个进程组的首进程。调用s e t s i d以创建一个新对话期,并使子进程成为了首进程。再次使用fork,使父进程(第一次fork的子进程)终止,第二个子进程作为精灵进程继续运行。这样就保证了该精灵进程不是对话期首进程,防止了它取得终端控制。
void os_daemonize(void){ if (daemonize) {pid_t pid;if (pipe(fds) == -1) exit(1);pid = fork();if (pid > 0) { uint8_t status; ssize_t len; close(fds[1]);again: len = read(fds[0], &status, 1); if (len == -1 && (errno == EINTR)) goto again; if (len != 1) exit(1); else if (status == 1) { fprintf(stderr, "Could not acquire pidfile: %s\n", strerror(errno)); exit(1); } else exit(0);} else if (pid < 0) exit(1);close(fds[0]);qemu_set_cloexec(fds[1]);setsid();pid = fork();if (pid > 0) exit(0);else if (pid < 0) exit(1);umask(027); signal(SIGTSTP, SIG_IGN); signal(SIGTTOU, SIG_IGN); signal(SIGTTIN, SIG_IGN); }}
转自:http://hi.baidu.com/jyoeiken/item/9303a44a82135be91381da83
0 0
- qemu中daemonize为什么要两次fork
- daemon 进程为什么要fork两次
- daemon 进程为什么要fork两次
- daemon 进程为什么要fork两次
- daemon 进程为什么要fork两次
- daemon 进程为什么要fork两次
- daemon 进程为什么要fork两次
- 为什么守护进程要fork()两次
- 守护进程为什么要fork两次?
- 创建守护进程为什么要fork两次
- Linux--守护进程,为什么要fork两次
- daemon编程规则(为什么要fork两次)
- 为什么要fork两次来避免产生僵尸进程
- Android守护进程--为什么要fork()两次
- 创建守护进程为什么fork两次
- 创建守护进程为什么fork两次
- 创建守护进程以及为什么fork两次
- 为什么fork调用会返回两次
- UIWebView输出cookie
- android之JNI开发步骤总结
- live555-基础类
- 工作流引擎Activiti使用总结
- Hive语法
- qemu中daemonize为什么要两次fork
- Andorid系统根据包名启动APK
- NDK 环境路径配置
- svn蓝色的小问号
- 使用NSUserDefaults对iSO应用保存设置数据和缓存对象
- Invitation Cards - POJ 1511 spfa
- HDU 2151 Worm
- static关键字
- Calling Extraterrestrial Intelligence Again(暴搜)