创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡><)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
Linux系列专栏:Linux基础给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
孤儿进程是父进程结束后,自己仍继续运行的进程。孤儿进程会被1号进程(init进程)收养。
每当出现一个孤儿进程的时候,内核就把孤儿的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。
守护进程是一种在后台持续运行的特殊进程。守护进程一般不与用户直接交互,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护进程是一种特殊的孤儿进程。
守护进程丢弃了原有的控制终端,因此需要创建新会话以脱离控制终端。
会话是多个进程组的集合。
建立新会话时,先调用fork()
,父进程终止,子进程调用setsid()
函数
创建会话函数:
以自己的ID设置进程组ID,同时也是新会话的ID
pid_t setsid(void)
返回值:
获取当前进程的会话id:
pid_t getsid(pid_t pid);
返回值:
fork()
函数创建子进程,终止父进程,让其子进程成为孤儿进程setsid()
函数创建一个新会话,脱离终端创建守护进程代码示例:
#include
#include
#include
#include
#include
#include
#include
void daemon_create()
{
pid_t pid;
pid = fork();
if(pid > 0)
{
exit(0); //父进程退出
}
else if(pid == 0)
{
int errfd;
setsid(); //创建新会话
errfd = open("error.log",O_RDWR|O_CREAT,0664);
close(STDIN_FILENO); //关闭输入输出描述符
close(STDOUT_FILENO);
dup2(errfd,STDERR_FILENO);//描述符重定向
umask(0002); //修改权限掩码
chdir("./"); //工作路径改为根目录
while(1)
{
//do something...
}
}
else
{
perror("fork call failed\n");
}
}
int main()
{
daemon_create();
return 0;
}
守护进程的特点:
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |