⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1

📁 蓝牙
💻
字号:
/* Change this to the user under which to run */#define RUN_AS_USER "root"#define EXIT_SUCCESS 0#define EXIT_FAILURE 1#if 0static void child_handler(int signum){    switch(signum)	{    case SIGALRM: exit(EXIT_FAILURE); break;    case SIGUSR1: exit(EXIT_SUCCESS); break;    case SIGCHLD: exit(EXIT_FAILURE); break;    }}static void daemonize(const char *lockfile){    pid_t pid, sid, parent;    int lfp = -1;    /* already a daemon */    if (getppid() == 1) return;    /* Create the lock file as the current user */    if (lockfile && lockfile[0])	{        lfp = open(lockfile,O_RDWR|O_CREAT,0640);        if (lfp < 0) {            printf("unable to create lock file %s, code=%d (%s)",                    lockfile, errno, strerror(errno));            exit(EXIT_FAILURE);        }    }    /* Drop user if there is one, and we were run as root */    if ( getuid() == 0 || geteuid() == 0 ) {        struct passwd *pw = getpwnam(RUN_AS_USER);        if (pw) {            printf("setting user to " RUN_AS_USER);            setuid( pw->pw_uid );        }    }    /* Trap signals that we expect to recieve */    signal(SIGCHLD, child_handler);    signal(SIGUSR1, child_handler);    signal(SIGALRM, child_handler);    /* Fork off the parent process */    pid = fork();    if (pid < 0) {        printf("unable to fork daemon, code=%d (%s)",                errno, strerror(errno) );        exit(EXIT_FAILURE);    }    /* If we got a good PID, then we can exit the parent process. */    if (pid > 0) {        /* Wait for confirmation from the child via SIGTERM or SIGCHLD, or           for two seconds to elapse (SIGALRM).  pause() should not return. */        alarm(2);        pause();        exit(EXIT_FAILURE);    }    /* At this point we are executing as the child process */    parent = getppid();    /* Cancel certain signals */    signal(SIGCHLD,SIG_DFL); /* A child process dies */    signal(SIGTSTP,SIG_IGN); /* Various TTY signals */    signal(SIGTTOU,SIG_IGN);    signal(SIGTTIN,SIG_IGN);    signal(SIGHUP, SIG_IGN); /* Ignore hangup signal */    signal(SIGTERM,SIG_DFL); /* Die on SIGTERM */    /* Change the file mode mask */    umask(0);    /* Create a new SID for the child process */    sid = setsid();    if (sid < 0) {        printf("unable to create a new session, code %d (%s)",                errno, strerror(errno) );        exit(EXIT_FAILURE);    }    /* Change the current working directory.  This prevents the current       directory from being locked; hence not being able to remove it. */    if ((chdir("/")) < 0) {        printf("unable to change directory to %s, code %d (%s)",                "/", errno, strerror(errno) );        exit(EXIT_FAILURE);    }    /* Redirect standard files to /dev/null */    freopen("/dev/null", "r", stdin);    freopen("/dev/null", "w", stdout);    freopen("/dev/null", "w", stderr);    /* Tell the parent process that we are A-okay */    kill( parent, SIGUSR1 );}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -