+ -
当前位置:首页 → 问答吧 → 关于后台运行和守护进程的区别?

关于后台运行和守护进程的区别?

时间:2010-08-18

来源:互联网

在linux下使用 & 可以使程序进入后台运行模式,使用守护进程方法也可以使程序和终端分离出来。
请问这两者的区别是什么?还请高人指点。。

作者: rain_fish   发布时间: 2010-08-18

本帖最后由 davelv 于 2010-08-18 09:29 编辑

后台的文件描述符也是继承于父进程,例如shell,所以它也可以在当前终端下显示输出数据。
但是daemon进程自己变成了进程组长,其文件描述符号和控制终端没有关联,是控制台无关的。

作者: davelv   发布时间: 2010-08-18

回复 rain_fish

基本上任何一个程序都可以后台运行,但守护进程是具有特殊要求的程序,比如要脱离自己的父进程,成为自己的会话组长等,这些要在代码中显式地写出来

换句话说,守护进程肯定是后台进程,但反之不成立。守护进程顾名思义,主要用于一些长期运行,守护着自己的职责(监听端口,监听服务等)。我们的系统下就有很多守护进程。

作者: chong232   发布时间: 2010-08-18

很多系统服务名字后面带个d,就是daemon、守护的意思。另外unistd.h中定义了daemon()这个函数可以把当前进程状态转化为daemon进程。

作者: davelv   发布时间: 2010-08-18



QUOTE:
后台的文件描述符也是继承于父进程,例如shell,所以它也可以在当前终端下显示输出数据。
但是daemon进程自 ...
davelv 发表于 2010-08-18 09:26




    也就是说后台进程和守护进程的区别仅仅是后台进程的父进程是终端吗?

作者: rain_fish   发布时间: 2010-08-18

他们的父进程都没有任何区别,区别在于,守护进程成为了进程组长(或者会话组长),和控制终端失去了联系(其文件描述符也是继承于父进程的,但是在变成守护进程的同时stdin,stdout,stderr和控制台失去联系了)。

作者: davelv   发布时间: 2010-08-18

那到了后台,所在会话又退出了呢?这个进程已经不属于任何会话了,也被INIT领走了...还有区别么?

作者: liwangli1983   发布时间: 2010-08-18



QUOTE:
那到了后台,所在会话又退出了呢?这个进程已经不属于任何会话了,也被INIT领走了...还有区别么?
liwangli1983 发表于 2010-08-18 10:26




    也就这点区别吗?

作者: rain_fish   发布时间: 2010-08-18



QUOTE:
也就这点区别吗?
rain_fish 发表于 2010-08-18 10:31




刚才做了个小实验,写了个小程序,内容就是给SIGTERM安装一个信号处理函数,函数的内容就是打印hello.函数主体是个死循环.直接让其在后台运行,PS查看到进程ID后KILL之刚终端显示hello.ps -ef也看到其所关联终端确实也存在.

然后exit退出这个会话重新登录,再ps之发现a.out已经没有所关联的终端了,kill之也没有反应(没终端啊).用ps -eo pid,ppid,pgrp,session.comm查看发现的守护进程pid,pgrp,session三项都是一样的,很显然守护进程运行前调用setsid使自己成为了新会话首进程并成为会话中唯一进程组的组长进程,故三者一致.但a.out那个后台进程,session和pig,pgrp不一样.因为a.out不是所在会话的首进程,虽然首进程已经退出了

作者: liwangli1983   发布时间: 2010-08-18



QUOTE:
刚才做了个小实验,写了个小程序,内容就是给SIGTERM安装一个信号处理函数,函数的内容就是打印hello.函 ...
liwangli1983 发表于 2010-08-18 10:53




    学习了,非常感谢。。

作者: rain_fish   发布时间: 2010-08-18



QUOTE:
学习了,非常感谢。。
rain_fish 发表于 2010-08-18 10:57




    其实我感觉所在会话退出了的后台进程,和守护进程就没啥区别了吧......

作者: liwangli1983   发布时间: 2010-08-18