守护进程
一、进程组和会话
-
进程组和会话
-
进程组概念
-
ps ajx
查看进程IDa
表示不仅列当前用户的进程,也列出所以其它用户的进程j
表示不仅列有控制终端的进程,也列出所有无控制终端的进程x
表示列出与作业控制相关的信息
cat | cat | cat | wc -l
命令
-
会话: 多个进程组的结合,依附于bash创建
-
创建会话
二、getsid函数
三、setsid函数
四、守护进程
五、创建守护进程
需用kill
命令杀死,可使用脚本程序管理
示例:创建守护进程
//daemon.c
int main(int argc, char *argv[])
{
pid_t pid;
int ret, fd;
pid = fork();
if (pid > 0) // 父进程终止
exit(0);
pid = setsid(); //创建新会话
if (pid == -1)
sys_err("setsid error");
ret = chdir("/home/itcast/28_Linux"); // 改变工作目录位置
if (ret == -1)
sys_err("chdir error");
umask(0022); // 改变文件访问权限掩码
close(STDIN_FILENO); // 关闭文件描述符 0
fd = open("/dev/null", O_RDWR); // fd --> 0
if (fd == -1)
sys_err("open error");
dup2(fd, STDOUT_FILENO); // 重定向 stdout和stderr
dup2(fd, STDERR_FILENO);
while (1); // 模拟 守护进程业务.
return 0;
}