首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么守护进程会分叉?

守护进程会分叉的原因是为了实现后台运行和脱离终端的功能。当一个进程需要在后台运行,并且不受终端关闭的影响时,可以通过创建守护进程来实现。

守护进程的分叉是通过调用fork()系统调用来实现的。fork()会创建一个与父进程几乎完全相同的子进程,包括代码、数据和打开的文件描述符等。但是,子进程会继承父进程的进程组ID和会话ID,并且会脱离终端。

具体来说,守护进程的分叉过程如下:

  1. 父进程调用fork()创建子进程。
  2. 子进程继承父进程的大部分属性,包括文件描述符等。
  3. 子进程调用setsid()创建一个新的会话,并成为该会话的首进程。这样子进程就与原来的终端脱离了关系。
  4. 子进程关闭不再需要的文件描述符,防止浪费系统资源。
  5. 子进程可以继续执行其他任务,而父进程可以退出,使得子进程成为一个独立的守护进程。

守护进程的分叉有以下优势和应用场景:

  1. 后台运行:守护进程可以在后台持续运行,不受终端关闭的影响,提供持久的服务。
  2. 脱离终端:守护进程与终端脱离关系,不会受到用户登录和注销的影响。
  3. 系统服务:守护进程常用于实现系统级别的服务,如网络服务、定时任务等。
  4. 日志记录:守护进程可以将运行日志记录到文件中,方便故障排查和日志分析。

腾讯云提供了一系列与守护进程相关的产品和服务,包括云服务器、容器服务、函数计算等。您可以根据具体需求选择适合的产品。以下是腾讯云相关产品的介绍链接地址:

请注意,以上答案仅供参考,具体的技术实现和产品选择还需要根据实际情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

守护进程

5.1 概念 (1)什么是守护进程 Daemon(守护进程)是运行在后台的一种特殊进程。**它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。...Linux系统的大多数服务器就是通过守护进程实现的。 (2)为什么需要守护进程 守护进程是脱离于终端并且在后台运行的进程。...守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。...(3)守护进程实例 常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等。...改变当前目录为根目录,防止占用其他可卸载的文件系统 d.重设文件权限掩码,防止继承的文件创建屏蔽字拒绝某些权限,增加守护进程的灵活性 e.关闭文件描述符 f.守护进程退出处理 ?

1.7K20

守护进程

守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。...守护进程是一个在后台运行并且不受任何终端控制的进程。这也是守护进程最重要的特点。在Linux下创建守护进程的步骤如下。...创建子进程,终止父进程 这是因为守护进程是脱离终端控制的,所以要造成一种在终端里已经运行完的假象,把所有的工作都放在子进程中去完成。父进程退出后,子进程变成孤儿进程。...关闭文件描述符 用fork新建的子进程从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,可能导致所在的文件系统无法卸载。...、 下面是在Linux系统下创建守护进程的一个简单示例。

1.8K10

守护进程

首先,什么是守护进程守护进程是一个在后台长期运行并且不受任何终端控制的进程。 其次,为什么需要守护进程?...我们知道linux有许多自带的守护进程,比如syslogd、crond、sendmail等。那用户或开发者自己编写的程序为什么也需要成为守护进程呢? 这主要是因为守护进程的特性。...这一步的作用有两个: 1.非系统守护进程可能是由用户手动执行的,比如在终端shell上执行./nginx。父进程的终止让shell认为这条命令已经执行完毕。...2.子进程继承父进程进程组ID,但子进程肯定不是组长,这个特性是下一步调用setsid的提前。 二、Call setsid to create a new session.--创建新会话。...只有父进程可以回收子进程的资源,所以父进程不死,没有其它进程能解决这个僵尸进程;父进程死了,则可以由init来接管,僵尸进程就不存在了。僵尸进程是服务器的大忌,大量的僵尸进程导致服务器宕机。

2.7K40

守护线程与守护进程

守护进程进程创建守护进程   其一:守护进程会在主进程代码执行结束后就终止   其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes...are not allowed to have children 注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止 from multiprocessing import Process...无论是进程还是线程,都遵循:守护xxx等待主xxx运行完毕后被销毁 需要强调的是:运行完毕并非终止运行 #1.对主进程来说,运行完毕指的是主进程代码运行完毕 #2.对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕...,主线程才算运行完毕 详细解释: #1 主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束,...因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,而进程必须保证非守护线程都运行完毕后才能结束。

1.9K90

守护进程Supervisor

介绍 在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便。...为此Supervisor工具应运而生,它能够对很方便的对多个进程进行简单高效中心化管理。...停止,查看服务状态: 123 systemctl start supervisordsystemctl stop supervisordsystemctl status supervisord 管理进程...: 12 supervisorctl rereadsupervisorctl update 按组划分进程 supervisor可以通过设置优先级按顺序启动进程,但不支持等待上个进程完再执行下一个进程,...可通过给进程划分组的方式变相实现,首先修改配置文件vim /etc/supervisord.conf,为进程设置组: 123 [group:mygroup]programs=demo1,demo2 ;

76820

13(守护进程)

13.2 守护进程的特征 守护进程是一种纯粹的后台进程,与运行前环境完全隔离,包括未关闭的文件描述符、控制终端、会话、进程组、工作目录以及文件创建掩码等 很多守护进程是父进程 fork 产生...,所以继承所有的父进程地址空间中的环境,所以必须在守护进程诞生之初,断绝这些相关环境,当然,守护进程也可以在 linux 系统启动时从启动脚本 /etc/rc.d 中启动,也可以由 crontab 启动...事实上,守护进程与普通进程的编写并没有特别大的区别 13.3 编程规则 (1)进程从创建他的父进程那里继承了文件创建掩码,它可能修改守护进程创建的文件的存取位。...这样做实现了以下两点:第一,如果该守护进程是通过shell命令启动的,那么父进程终止使得shell认为该命令已执行完毕。...SIGHUP, &sa, NULL) < 0) { perror("sigaction"); exit(-1); } // 再次 fork 让守护进程不再担当会话组长

78710

Python 守护进程

守护进程:通常被定义为一个后台进程,而且它不属于任何一个终端会话(terminal session)。许多系统服务由守护程序实施;如网络服务,打印等。 ...下面是转自一位网友写的编写守护进程的步骤: 1. 调用fork()以便父进程可以退出,这样就将控制权归还给运行你程序的     命令行或shell程序。...需要这一步以便保证新进程不是一个进程组头领进程(process     group leader)。下一步,‘setsid()’,因为你是进程组头领进程而失败。 2....由于一个控制终端     与一个会话相关联,而且这个新会话还没有获得一个控制终端,我们的进程没     有控制终端,这对于守护程序来说是一件好事。 3....调用‘chdir("/")’确认我们的进程不保持任何目录于使用状态。不做这个导     致系统管理员不能卸装(umount)一个文件系统,因为它是我们的当前工作目录。

91430

守护进程详解

在一个多任务的电脑操作系统中,守护进程(英语:daemon,/ˈdiːmən/或/ˈdeɪmən/)是一种在后台执行的电脑程序。此类程序会被以进程的形式初始化。...守护进程程序的名称通常以字母“d”结尾:例如,syslogd就是指管理系统日志的守护进程。 通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。...守护进程程序通常通过如下方法使自己成为守护进程:对一个子进程运行fork,然后使其父进程立即终止,使得这个子进程能在init下运行。这种方法通常被称为“脱壳”。 系统通常在启动时一同引导守护进程。...守护进程为对网络请求,硬件活动等进行响应,或其他通过某些任务对其他应用程序的请求进行回应提供支持。...而作为Unix-like的Mac OS X有守护进程。(在Mac OS X中也有“服务”,但他们与Windows中类似的程序在概念上完全不相同。)

85921

守护进程(daemon)

守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。...守护进程是一个在后台运行并且不受任何终端控制的进程。这也是守护进程最重要的特点。在Linux下创建守护进程的步骤如下。...创建子进程,终止父进程 这是因为守护进程是脱离终端控制的,所以要造成一种在终端里已经运行完的假象,把所有的工作都放在子进程中去完成。父进程退出后,子进程变成孤儿进程。...关闭文件描述符 用fork新建的子进程从父进程那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读或写,但它们一样消耗系统资源,可能导致所在的文件系统无法卸载。...、 下面是在Linux系统下创建守护进程的一个简单示例。

1.3K20

linux守护进程

守护进程一般都以root用户权限运行,因为要使用某些特殊的端口或者资源; 守护进程的父进程一般都是init进程,因为它真正的父进程在fork出守护进程后就直接退出了,所以守护进程都是孤儿进程,由init...接管; 2、有哪些常见的守护进程 日志服务进程 syslogd 数据库守护进程 mysqld 3、创建守护进程的步骤 1)fork()创建子进程,父进程exit()退出 这是创建守护进程的第一步。...3)再次 fork() 一个孙进程并让子进程退出 为什么要再次fork呢,假定有这样一种情况,之前的父进程fork出子进程以后还有别的事情要做,在做事情的过程中因为某种原因阻塞了,而此时的子进程因为某些非正常原因要退出的话...由于在进程运行中,当前目录所在的文件系统(如“/mnt/usb”)是不能卸载的,这对以后的使用造成诸多的麻烦(比如系统由于某种原因要进入单用户模式)。...6)在孙进程中关闭任何不需要的文件描述符 同文件权限码一样,用fork函数新建的子进程从父进程那里继承一些已经打开了的文件。

3.1K20

android守护进程

而一些安全软件,如360等,会有结束进程的功能,如果不做Service的保持,就会被其杀掉。...要么像第四种单独的进程运行service在360老的版本是可以的,但是在360的比较新的版本中仍然会被杀死....另外再加上两个类似一守护进程的Service, 分别检查Service的运行状态,注册响应的广播,对其进行守护,一旦发现没有运行就将其启动....至于检测方式,可以轮询获取子进程Pid,若为1, 则说明子进程被Init进程所领养,已经成为了孤儿进程.   ...但是这种方式比较消耗电量,并且由于不同手机系统定制的改变,当应用被强制停止时,父进程并不一定被真正杀死,因此在一些特定机型上是无法通过此方式进行判断.

2.1K80

守护进程与僵尸进程

除了init,任何进程一定有他的父进程,而父进程负责分配(fork)、回收(wait4)它申请的进程资源。...这个树状关系也比较健壮,当某个进程还在运行时,它的父进程却退出了,这个进程却没有成为孤儿进程,因为linux有一个机制,init进程接管它,成为它的父进程。...这也是守护进程的由来了,因为守护进程的其中一个要求就是希望init成为守护进程的父进程。...forget_original_parent这个函数还会把该进程的所有子孙进程重设父进程,交给init进程接管。 回过头来,看看为什么守护进程要fork两次。...父进程先fork出一个儿子进程,儿子进程再fork出孙子进程做为守护进程,然后儿子进程立刻退出,守护进程被init进程接管,这样无论父进程做什么事,无论怎么被阻塞,都与守护进程无关了。

1.6K10

python守护进程

假如写一段服务端程序,如果ctrl+c退出或者关闭终端,那么服务端程序就会退出,于是就想着让这个程序成为守护进程,像httpd一样,一直在后端运行,不会受终端影响。...守护进程英文为daemon,像httpd,mysqld,最后一个字母d其实就是表示daemon的意思。 守护进程的编写步骤: fork子进程,然后父进程退出,此时子进程会被init进程接管。...重定向孙子进程的标准输入流,标准输出流,标准错误到/dev/null 完成上面的4个步骤,那么最终的孙子进程就称为守护进程,先看下代码,后面分析下步骤的原因。 #!...2.修改子进程的工作目录 子进程在创建的时候继承父进程的工作目录,如果执行的程序是在U盘里面,就会导致U盘不能卸载。...4.修改umask 由于umask屏蔽权限,所有设定为0,这样可以避免读写文件时碰到权限问题 5.fork孙子进程,子进程退出 经过上面几个步骤后,子进程会成为新的进程组老大,可以重新申请打开终端,

1K20

守护进程(Daemon)

守护进程的概念 守护进程(Daemon)一般是为了保护我们的程序/服务的正常运行,当程序被关闭、异常退出等时再次启动程序/恢复服务。...例如 http 服务的守护进程叫 httpd,mysql 服务的守护进程叫 mysqld。...守护进程的创建 Linix 中可以调用 int daemon(int nochdir, int noclose); 函数来使程序成为一个守护进程。...子进程继承父进程的会话,进程组,控制终端,文件描述符等。 setid 通过setid()来创建新会话,同时也脱离了原来的进程组,会话以及控制终端,成为新的会话的组长。...此时它可能再申请一个控制终端,所以我们再 fork 一下,并只保留新的子进程,这样就不是会话组长了,就不能申请控制终端了。 close(fd) 之后再关闭从父进程继承的文件描述符。

7.5K30
领券