网站建设公司价格,贺州市八步区乡镇建设局网站,非物质文化遗产网站怎么做,中国交通建设集团有限公司级别守护进程
守护进程的创建过程
1、创建子进程#xff0c;并退出父进程#xff1a;
守护进程的创建通常通过fork()系统调用实现。fork()会创建一个新的子进程#xff0c;该子进程是调用进程#xff08;父进程#xff09;的副本。父进程会继续执行fork()之后的代码#x…守护进程
守护进程的创建过程
1、创建子进程并退出父进程
守护进程的创建通常通过fork()系统调用实现。fork()会创建一个新的子进程该子进程是调用进程父进程的副本。父进程会继续执行fork()之后的代码而子进程将继续执行从fork()调用处开始的代码。为了让守护进程在后台运行父进程需要退出确保不会成为僵尸进程。子进程将继续执行后续的守护进程代码。
2、创建新会话
pid_t setsid(void);在第一步创建的子进程中调用setsid()系统调用可以创建一个新的会话。这一步是为了让守护进程独立于原始的终端会话并且脱离控制终端。新会话的创建使得守护进程不会因为终端关闭而受到影响并且它也不再拥有控制终端。同时它成为新的进程组的组长并且没有控制终端可以控制它。
3、更改工作目录
int chdir(const char *path);默认情况下守护进程的当前工作目录可能是在创建它的父进程所在的目录。为了防止影响其他目录的操作守护进程应该将当前工作目录切换到一个合适的目录。通常守护进程会切换到根目录/或者指定一个特定的工作目录。
4、重设文件掩码
mode_t umask(mode_t mask);文件掩码是用来限制新建文件的权限的。它决定了在使用open()或者creat()等函数创建新文件时文件的默认权限。为了确保守护进程创建的文件不受继承的文件掩码影响需要调用umask()函数进行重设。通常将文件掩码设置为0以便允许守护进程创建具有完全权限的文件。
5、关闭从父进程继承过来的所有文件描述符 getdtablesize()函数和sysconf(_SC_OPEN_MAX)函数都是用于获取文件描述符表的大小即在一个进程中可以同时打开的文件描述符的最大数量。_SC_OPEN_MAX参数表示最大文件描述符数目。现在系统一般都用sysconf(_SC_OPEN_MAX)函数 //循环closeint maxfd sysconf(_SC_OPEN_MAX);for(int i 0; i maxfd ; i){close(i);}在创建子进程时子进程会继承父进程的所有打开的文件描述符。由于守护进程不需要与控制终端交互而且也不需要继承任何打开的文件描述符所以应该将所有不必要的文件描述符关闭。一种常见的做法是循环关闭文件描述符将所有打开的文件描述符关闭掉除了 标准输入、标准输出和标准错误描述符文件描述符0、1和2。