加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux守护进程如何创建

发布时间:2023-05-24 11:39:29 所属栏目:Linux 来源:
导读:  这篇文章主要讲解了“linux守护进程怎么创建”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux守护进程怎么创建”吧!

  守护
  这篇文章主要讲解了“linux守护进程怎么创建”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux守护进程怎么创建”吧!

  守护进程也称为精灵进程(Daemon),是一个在后台运行且不受任何终端控制的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。
 
  它独立于控制终端并且周期性地执行某种发生的视件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。
 
  Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其他进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程(守护进程)不受用户登录注销的影响,它们一直在运行着。这种进程有一个名称叫守护进程(Daemon)。
 
  下面使用ps axj命令查看系统中的进程。参数a 表示不仅列出当前用户的进程,也列出所有其他用户的进程;参数x 表示不仅列出有控制终端的进程,也列出所有无控制终端的进程;参数j 表示列出与作业控制相关的信息。
 
  linux守护进程怎么创建
 
  (1)凡是TPGID一栏写着-1的都是没有控制终端的进程,也就是守护进程;
 
  (2)在COMMAND一列用[ ]括起来的名字表示内核线程,这些线程在内核里创建,没有用户空间代码,因此没有程序文件名和命令行,通常采用以k开头的名字,表示Kernel;
 
  (3)init进程我们已经很熟悉了,udevd负责维护/dev目录下的设备文件,acpid负责电源管理,syslogd负责维护/var/log下的日志文件;
 
  (4)可以看出,守护进程通常采用以d结尾的名字,表示Daemon。
 
  守护精诚的特点
 
  (1)在Linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端;
 
  (2)当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离终端并且在后台运行(脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断),它从被执行的时候开始运转,直到整个系统关闭才退出(当然可以认为是杀死相应的守护进程);
 
  (3)如果想让某个进程不因为用户中断或其他变化而被影响,那么就必须把这个进程变成一个守护进程。
 
  进程,进程组,会话,控制终端之间的关系

  进程组:它是由一个或多个进程组成,进程组号(GID)就是这些进程中的进程组长的PID。

  会话:其实叫做会话期(session),它包括了期间所有的进程,一般一个会话期开始于用户login,一般login的是shell终端,所以shell终端又是此次会话期的进程,会话一般结束于logout。对于非进程组长,它可以调用setsid()创建一个新的会话。

  控制终端(tty):一般就是指shell终端,它在会话期中可以有也可以没有。
 
  创建守护进程最关键的一步是调用setsid函数创建一个新的Session Leader。
 
  #includepid_t setid(void);//该函数调用成功时返回新创建的Session的id(其实也就是当前进程的id),出错返回-1。

  注意,调用这个函数之前,当前进程不允许是进程组的Leader,否则该函数返回-1。要保证当前进程不是进程组的Leader也很容易,只要先fork再调用setsid就行了。fork创建的子进程和父进程在同一个进程组中,进程组的Leader必然是该组的第一个进程,所以子进程不可能是该组的第一个进程,在子进程中调用setsid就不会有问题了。
 
  成功调用该函数的结果是:
 
  (1)创建一个新的Session,当前进程为Session Leader,当前进程的id就是Session的id;
 
  (2)创建一个新的进程组,当前进程为进程组的Leader,当前进程的id就是进程组的id;
 
  (3)如果当前进程原本有一个控制终端,则它失去这个终端,成为一个没有控制终端的进程。
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章