守护进程
通常在系统启动时运行,系统关闭时结束
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无法再使用
08-17
3750