/******************************************************************************
* 守护进程 //关闭一个终端但没有关闭一个程序,同样程序也会跟着关闭 守护进程可解决这一问题
* 1.就是将父进程exit结束之后
* 2.子进程交给init进程来处理,
* 3.在做一个重定向就可以了
*
*
* 孤儿进程:
* 1.一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。
* 2.孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作。
*
*
* 僵尸进程:
* 1.一个进程使用fork创建子进程,如果子进程退出,
* 2.而父进程并没有调用wait或waitpid获取子进程的状态信息,
* 3.那么子进程的进程描述符仍然保存在系统中。
* 4.这种进程称之为僵死进程
*******************************************************************************/
//守护进程//程序开始调用就可以了
#include <fcntl.h>
#include <unistd.h>
int daemon(int nochdir, int noclose)
{
int fd;
switch (fork()) {
case -1:
return (-1);
case 0:
break;
default:
_exit(0);//父进程结束,子进程自动交给init进程处理
}
if (setsid() == -1)
return (-1);
//这里就是重定向
if (!nochdir)
(void)chdir("/");
if (!noclose && (fd = open("/dev/null", O_RDWR, 0)) != -1)
{
(void)dup2(fd, STDIN_FILENO);
(void)dup2(fd, STDOUT_FILENO);
(void)dup2(fd, STDERR_FILENO);
if (fd > 2)
(void)close (fd);
}
return (0);
}
05-18
4634
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)