守护进程 通常在系统启动时运行,系统关闭时结束 linux系统中大量使用,很多服务程序以守护进程形式运行 守护进程特点 始终在后台运行 独立于任何终端 周期性的执行某种任务或等待处理特定事件 守护进程 - 会话、控制终端 linux以会话、进程组的方式管理进程 每个进程属于一个进程组 子进程与父进程属于同一个进程组 会话是一个或多个进程组的集合。通常用户打开一个终端时,系 统会创建一个会话。所有通过该终端运行的进程都属于这个会话 终端关闭时,所有相关进程会被结束 守护进程创建 创建子进程,父进程退出 if(fork()<0){ exit(-1); } 子进程变成孤儿进程,被init进程收养 子进程在后台运行 子进程创建新的会话 if(setsid()<0){ exit(-1); } 子进程成为新的会话组长 子进程脱离原先的终端 更改当前工作目录 chdir("/"); chdir("/tmp"); 守护进程一直在后台运行,其工作目录不能被卸载 重新设定当前工作目录cwd 重设文件权限掩码 if(umask(0)<0){ exit(-1); } 文件权限掩码设置为0 只影响当前进程 关闭打开的文件描述符 int i; for(i = 0;i<getdtablesize();i++){ close(i); } 关闭所有从父进程继承的打开文件 已脱离终端,stdin/stdout/stderr无法再使用