- 论坛徽章:
- 0
|
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
#include <stdarg.h>
#include <stdint.h>
#include <time.h>
#include <limits.h>
#include <string.h>
#include <unistd.h>
#include <stddef.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <math.h>
#define MYPATHSTR "/"
#define NULLDEV "/dev/null" // path of the null device
#define true 1
#define false 0
typedef char bool;
bool ttdaemonize(void){
fflush(stdout);
fflush(stderr);
switch(fork()){
case -1: return false;
case 0: break;
default: _exit(0);
}
if(setsid() == -1) return false;
switch(fork()){
case -1: return false;
case 0: break;
default: _exit(0);
}
umask(0);
if(chdir(MYPATHSTR) == -1) return false;
close(0);
close(1);
close(2);
int fd = open(NULLDEV, O_RDWR, 0);
if(fd != -1){
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
if(fd > 2) close(fd);
}
return true;
}
int main(void)
{
if (ttdaemonize())
{
}
}
哪位大神给分析下这段代码啊,守护进程为什么要调用两次fork等等的 |
|