昆明公司做网站的价格,android 旅游网站开发,wordpress前台视频上传,为什么建设网站守护进程(Daemon)Daemon(精灵)进程#xff0c;是linux中的后台服务进程#xff0c;通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间。一般采用以d结尾的名字。从下面的进程信息可以看出#xff0c;守护进程都是【#xff1f;】。colord 1160 0.0 0.2 …守护进程(Daemon)Daemon(精灵)进程是linux中的后台服务进程通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的时间。一般采用以d结尾的名字。从下面的进程信息可以看出守护进程都是【】。colord 1160 0.0 0.2 399424 14520 ? Ssl 6月06 0:00 /usr/lib/colord/colordLinux后台的一些系统服务进程没有控制终端不能直接和用户交互。不受用户登录注销的影响一直在运作着他们都是守护进程。如ftp服务器nfs服务器等。创建守护进程最关键的一步是调用setsid函数创建一个新的会话(session)并成为session leader。会话和进程组会话比进程组更高一级多个进程组对应一个会话。多个进程在同一个进出组第一个进程是进程组的组长。组长(父进程)不可以创建会话必须是组员(子进程)创建。创建会话(session)1创建会话的进程不能是组长进程(父进程)2创建会话成功的进程变成组长进程(父进程)3新会话的进程丢弃原来的终端控制4建立新会话时先调用fork终止父进程子进程调用创建会话的函数setsid#include #include pid_t setsid(void);DESCRIPTIONsetsid() creates a new session if the calling process is not a processgroup leader. The calling process is the leader of the new session(i.e., its session ID is made the same as its process ID). The callingprocess also becomes the process group leader of a new process group inthe session (i.e., its process group ID is made the same as its processID).The calling process will be the only process in the new process groupand in the new session.普通的进程为什么不是守护进程因为普通的进程在终端执行当关闭终端时终端会给这个终端里执行的所有进程发送信号SIGHUP这个信号的默认处理的中断进程。所以当终端被关闭时所以的进程都被终止了不能成为守护进程。Signal Value Action Comment──────────────────────────────────────────────────────────────────────SIGHUP 1 Term Hangup detected on controlling terminalor death of controlling process创建守护进程的步骤1创建子进程终止父进程2在子进程中调用函数setsid来创建新会话3改变当前进程的目录。chdir函数4重新设置文件权限的掩码。umask函数5关闭012文件描述符。守护进程用不到012文件描述符。避免浪费资源。6开始执行守护进程的核心代码。7推出守护进程一般执行不到这里因为一直在循环里。例子每分钟做一个文件#include #include #include #include #include #include #include #include #include #include #define _FILE_ %s/log/data_%ldvoid catc(int num){char* host getenv(HOME);char buf[256] {0};sprintf(buf, _FILE_, host, time(NULL));int fd open(buf, O_WRONLY|O_CREAT, 0664);if(fd 0){perror(open:);exit(1);}close(fd);}int main(){//创建子进程pid_t pid fork();//关闭父进程if(pid 0){exit(0);}//创建新会话setsid();//设置掩码umask(0);//改变工作目录chdir(getenv(HOME));//关闭文件描述符close(0),close(1),close(2);//设置定时器struct itimerval it {{60, 0}, {1, 0}};setitimer(ITIMER_REAL, it, NULL);//捕捉信号SIGALRMstruct sigaction act;act.sa_flags 0;sigemptyset(act.sa_mask);act.sa_handler catc;sigaction(SIGALRM, act, NULL);while(1)sleep(1);}守护进程扩展了解普通的进程也能强行变成守护进程。使用命令【nohup】。它的作用是阻塞信号SIGHUP也就是当终端被关闭时信号SIGHUP被阻塞了所以进程就没有被终止。nohup ./a.out a.log 命令解释./a.out要执行的程序把输出重定向到a.log后台执行的意思标签process,创建,session,linux,进程,include,守护来源 https://www.cnblogs.com/xiaoshiwang/p/10988899.html