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

子进程不是仅为SIGBUS错误生成核心,而是成为僵尸进程

子进程是在父进程中创建的新进程。当父进程创建子进程后,子进程会拥有自己的进程ID(PID)和资源,但它的执行是独立于父进程的。子进程可以执行不同的任务,例如处理复杂的计算、执行耗时的操作或者并行处理任务。

SIGBUS错误是一种在程序执行过程中可能出现的错误类型,它表示发生了总线错误。总线错误通常是由于内存访问错误或者硬件故障引起的。当子进程遇到SIGBUS错误时,它可能会生成核心转储文件,用于调试和分析错误。

然而,子进程不仅仅是为了SIGBUS错误生成核心。在操作系统中,子进程在完成任务后,需要通知父进程它的退出状态。如果父进程没有及时处理子进程的退出状态,子进程就会成为僵尸进程。

僵尸进程是已经完成执行任务但父进程尚未处理其退出状态的子进程。僵尸进程不会占用系统资源,但它们的存在可能会导致系统中存在大量的僵尸进程,从而影响系统的正常运行。

为了避免僵尸进程的产生,父进程需要及时处理子进程的退出状态。可以通过调用wait()或waitpid()系统调用来等待子进程的退出,并获取其退出状态。一旦父进程处理了子进程的退出状态,子进程就会被完全清理,不再是僵尸进程。

总结:

  • 子进程是在父进程中创建的新进程,可以执行独立的任务。
  • SIGBUS错误是一种可能发生的错误类型,表示总线错误。
  • 子进程不仅仅是为了SIGBUS错误生成核心,它还可能成为僵尸进程。
  • 僵尸进程是已经完成任务但父进程尚未处理退出状态的子进程。
  • 父进程需要及时处理子进程的退出状态,以避免产生大量的僵尸进程。可以使用wait()或waitpid()系统调用来等待子进程退出并获取其退出状态。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux 信号

SIGBUS SIGBUS 将造成 总线中断 错误时发送给进程 SIGCHLD 当子进程终止、被中断或者被中断恢复,将 SIGCHLD 发送给进程。...此信号的一种常见用法是指示操作系统在子进程终止后清除其使用的资源。 SIGCONT SIGCONT 信号指示操作系统继续执行先前由 SIGSTOP 或 SIGTSTP 信号暂停的进程。...许多守护程序将重新加载其配置文件并重新打开其日志文件,而不是在收到此信号时退出。...与 SIGTERM 和 SIGINT 相比,这个信号无法捕获和忽略执行,并且进程在接收到此信号后无法执行任何清理操作,下面是一些例外情况 僵尸进程无法杀死,因为僵尸进程已经死了,它在等待父进程对其进行捕获...SIGRTMIN 至 SIGRTMAX SIGRTMIN 至 SIGRTMAX 是 实时信号 SIGQUIT 当用户请求退出进程并执行核心转储时,SIGQUIT 信号将由其控制终端发送给进程。

4.8K20

UNIX和Linux信号

6) SIGABRT 调用abort函数生成的信号。 7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。...如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。...这种情况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。...    终端线路挂断 SIGINT  终止进程    中断进程 SIGQUIT 建立CORE文件终止进程,并且生成core文件 SIGILL  建立CORE文件        非法指令 SIGTRAP...建立CORE文件        跟踪自陷 SIGBUS  建立CORE文件        总线错误 SIGSEGV 建立CORE文件        段非法错误 SIGFPE  建立CORE文件

4.2K40
  • 【Linux】进程状态

    进程终止并且产生core文件 SIGALRM timer到期, 有alarm或者setitimer 进程终止 SIGBUS 总线错误,地址没对齐等。取决于具体硬件。...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。 僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。...任何一个子进程(init除外)在exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理。这是每个子进程在结束时都要经过的阶段。...所以在LInux退出时,一般不会彻底退出,而是先进入Z状态,Z状态是为了方便后续父进程获取子进程的退出结果。...我们来见一见传说中的僵尸进程 僵尸进程的危害 1.如果父进程没有回收子进程,那么子进程是不是会一直处在僵尸进程状态?

    14610

    Linux信号列表及其详解

    进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。 4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段....6) SIGABRT 调用abort函数生成的信号。 7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。...如果进程终止不了,我们才会尝试SIGKILL。 17) SIGCHLD 子进程结束时, 父进程会收到这个信号。...如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。...这种情况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。

    14.5K30

    Linux信号列表

    进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。 4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段....6) SIGABRT 调用abort函数生成的信号。 7) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。...如果进程终止不了,我们才会尝试SIGKILL。 17) SIGCHLD 子进程结束时, 父进程会收到这个信号。...如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。...这种情 况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程 来接管)。

    3K40

    kill -?

    进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。4) SIGILL执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段....6) SIGABRT调用abort函数生成的信号。7) SIGBUS非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。...8) SIGFPE在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。9) SIGKILL用来立即结束程序的运行. 本信号不能被阻塞、忽略。...17) SIGCHLD子进程结束时, 父进程会收到这个信号。如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。...这种情 况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。

    12820

    守护进程

    子进程先于父进程退出:子进程结束调用exit清理资源后,此时它并没有结束,而是进入僵尸状态,等待它的父进程调用wait4来清理它的task_struct。...也就是在其调用exit后和父进程调用wait4前这段时间,子进程被称为僵尸进程。 如果一切正常,子进程僵尸状态只会存在很短的一段时间。...两次fork 守护进程两次调用fork就是出于僵尸进程的考虑:父进程生成守护进程后,还有其它事情要做,其『人生意义』不止是创建守护进程。...而如果父进程先fork子进程,子进程再立刻fork孙子进程,这样孙子进程成为守护进程,立刻被init接管,无论父进程怎么阻塞,都与守护进程无关了。...是不是需要两次fork主要是看自己设计,上面nginx就没有两次fork,因为设计上很明确,父进程创建守护进程后就立刻退出了,不会存在僵尸进程的问题。

    2.8K40

    docker的reap问题

    问题 僵尸进程 僵尸进程是指完成执行(通过exit系统调用,或运行时发生致命错误或收到终止信号所致),但在操作系统进程表中仍然有一个表项,处于“终止状态”的进程。...正常情况下,进程直接被其父进程wait并由系统回收,进程长时间保持僵尸状态一般是错误的并导致资源泄漏。 英语中的zombie process源自丧尸--不死之人,隐喻进程已死大但没有被reap。...为避免产生僵尸进程,实际应用中一般采取的方式是: 将父进程中对SIGCHLD信号的处理函数设置SIG_IGN fork两次并杀死一级自进程,令二级子进程成为孤儿进程而被init所“收养”、清理 与docker...大多数情况下,这个进程并不会有init进程的行为,也就是说,这个进程并不会reap收养的进程,而是期望init进程来做这件事,这种做法是合理的。 来看一个具体的例子。...Tini一般在容器中运行,用于生成子进程,等待它推出,reap僵尸进程,并执行信号转发。 在最新的版本中,能将退出码143重新映射为0。

    1.2K30

    【Linux】从零开始认识进程 — 中篇

    该休眠成为可中断睡眠,随时可以被外界唤醒。 代表子啊前台运行,在./ 可执行程序 后加&会在后台运行,就不带加号了。...,让我们看看效果: 当cnt小于0时,就结束了进程,于是子进程就成为了僵尸进程。...僵尸进程危害 进程的退出状态必须被维持下去,(因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了)。可父进程如果一直不读取,那子进程就一直处于Z状态,进而引起内存泄漏!...那一个父进程创建了很多子进程,就是不回收,是不是就会造成内存资源的浪费?是的!因为数据结构对象本身就要占用内存,想想C语言中定义一个结构体变量(对象),是要在内存的某个位置进行开辟空间!...挂起态,是一个表示进程被停滞的特殊状态。在此状态下,进程不会在主存中活跃,而是被转移到辅助存储器(如硬盘 的 swap)中。

    10210

    【Linux探索学习】第十七弹——进程终止:深入解析操作系统中的进程终止机制

    父进程终止 当父进程终止且子进程未被接管时,子进程可能成为孤儿进程,由init或systemd进程接管。 资源耗尽 进程因超出系统资源限制(如内存、文件句柄等)被操作系统强制终止。...核心转储终止 错误导致生成核心转储文件 例如段错误(SIGSEGV)导致的异常。 一般进程终止的场景包含一下三种: 1. 代码运行完毕,结果正常 2. 代码运行完毕,结果不正常 3....这种未被回收的子进程称为僵尸进程。...文件描述符:关闭该进程打开的所有文件。 CPU时间:释放进程的时间片。 5.2 僵尸进程 当子进程终止但父进程未调用wait或waitpid回收其状态时,子进程会变成僵尸进程。 如何避免僵尸进程?...终止 SIGTERM 请求终止进程,进程可以选择捕获或忽略。 终止 SIGABRT 异常终止进程,通常由abort触发。 终止并生成核心转储 SIGCHLD 子进程终止或停止时通知父进程。

    21010

    【Linux】进程状态

    ,代表该进程在运行队列中排队 证明当前进程运行状态 生成程序 创建makefile并输入如下内容 1 mytest:test.c//nakefile 2 gcc -o mytest test.c.../mytest 发现此时进程状态为S+ (+号后面会说) S称为休眠状态,不是R状态 ---- test.c代码修改如下 #include//test.c 2 int main(...linux当进程退出的时候,一般进程不会立即彻底退出,而是要维持一个状态叫做Z状态,也叫做僵尸状态 方便后续父进程读取子进程退出的退出结果 如何让我们看到僵尸状态呢?...S+ 当使用 kill - 9 +PID值将子进程干掉后,再次使用指令查询进程,发现子进程为僵尸状态,父进程为S+ 僵尸状态危害 在父子进程中,若父进程一直不读取,子进程就会处于Z状态 在父子进程中,若子进程一直处于僵尸状态...(即退出子进程,但不回收子进程),就会在内存中一直保留该进程 若父进程创建多个子进程,就是不回收,就会造成内存资源的浪费

    6.1K30

    Linux kill, killall, kill -9

    当使用此命令时,一定要通过ps -ef确认没有剩下任何僵尸进程。只能通过终止父进程来消除僵尸进程。如果僵尸进程被init收养,问题就比较严重了。杀死init进程意味着关闭系统。 ...如果系统中有僵尸进程,并且其父进程是init,而且僵尸进程占用了大量的系统资源,那么就需要在某个时候重启机器以清除进程表了。 ...然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。  ...5) kill -l 例如: kill -l PID  -l 选项, 告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。...但这个命令也不是总能成功--或许仍然需要先手工杀死子进程,然后再杀死父进程。  6) kill -HUP 有时候只想简单的停止和重启进程。

    6.4K20

    【操作系统】孤儿僵尸守护进程

    孤儿/僵尸/守护进程 孤儿进程和僵尸进程以及守护进程都是对调用fork()函数后子进程的描述。 孤儿进程 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。...---- 僵尸进程 一个进程使用fork创建子进程,如果子进程退出,而父进程没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程(这个子进程)称之为僵尸进程...僵尸进程如何产生? 当一个进程调用exit命令结束自己的声明周期时,其实它并没有真正的被销毁,而是留下一个称为僵尸进程的数据结构。...僵尸进程在系统中的标识 在ubuntu中,利用ps命令,发现标记有的进程就是僵尸进程。 如何清除僵尸进程? 改写父进程,为子进程收尸。...如何成为一个守护进程? 调用fork()函数,创建子进程,它会是将来的守护进程。 在父进程中调用exit,保证子进程不是进程组长。 调用setsid()函数创建新的会话区。

    33130

    Linux:进程地址空间、进程控制(一.进程创建、进程终止、进程等待)

    进程地址空间提供了一个抽象的视图,使得程序可以像访问内存一样访问代码和数据,而无需关心它们的实际存储位置。 虚拟地址并不是真实存在的物理内存地址,而是逻辑上的地址空间。...因为僵尸进程本身已经终止,只是其退出状态还没有被父进程读取 而且父进程派给子进程的任务完成的如何,我们需要知道。...在父进程中,wait 方法常被用来回收子进程的资源并获取子进程的退出信息,从而避免产生僵尸进程。 wait 函数允许父进程等待其子进程结束,并可以获取子进程的退出状态。...\n"); sleep(5); return 0; } 代码一共15秒 0~5秒内:子进程与父进程都存在,5秒后子进程结束 5~10秒内:父进程正常运行,子进程在僵尸。...WNOHANG:如果指定了此选项,waitpid 将不会阻塞,而是立即返回(父进程不会等待子进程了)。如果指定的子进程没有结束,则 waitpid 返回0;如果子进程已结束,则返回子进程的ID。

    16500

    linux系列之:告诉他,他根本不懂kill

    僵尸进程和kill 上面讲到了pid=1的初始进程是不能被kill的。还有一种不能被kill的进程叫做僵尸进程。...僵尸进程是linux程序中一个非常独特的状态,它表示的是进程已经结束了,但是又还没有完全死亡,就像僵尸一样。...那么什么是僵尸进程呢? 僵尸进程指的是程序在退出之后,该进程并不是马上消失的,而是会保留一个被称为僵尸的数据结构。这个数据结构很特殊,因为其没有内存空间,没有可执行的代码,当然也不可以被调度。...它只是在进程列表中占有一个位置,记录了该进程退出时候的各种信息。 僵尸进程主要是保留进程退出的现场,供父进程或者系统管理员进行分析使用的,所以僵尸进程是交由父进程来进行收集和释放的。...因为僵尸进程已经退出了,所以使用kill是没有用的,只能等待其父进程退出,才能真正的退出。 怎么查看僵尸进程呢?

    50610

    异步通信之 信号

    ,创建子进程时子进程将继承父进程的阻塞集。...信号阻塞集用来描述哪些信号递送到该进程的时候被阻塞。 所谓阻塞并不是禁止传送信号, 而是暂缓信号的传送。若将被阻塞的信号从信号阻塞集中删除,且对应的信号在被阻塞时发生了,进程将会收到相应的信号。...SA_NOCLDWAIT:使父进程在它的子进程退出时不会收到 SIGCHLD 信号,这时子进程如果退出也不会成为僵尸进程。...SIGABRT 调用abort函数生成的信号。 SIGBUS 非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。...如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。

    1.2K20

    linux系列之:告诉他,他根本不懂kill

    僵尸进程和kill 上面讲到了pid=1的初始进程是不能被kill的。还有一种不能被kill的进程叫做僵尸进程。...僵尸进程是linux程序中一个非常独特的状态,它表示的是进程已经结束了,但是又还没有完全死亡,就像僵尸一样。...那么什么是僵尸进程呢? 僵尸进程指的是程序在退出之后,该进程并不是马上消失的,而是会保留一个被称为僵尸的数据结构。这个数据结构很特殊,因为其没有内存空间,没有可执行的代码,当然也不可以被调度。...它只是在进程列表中占有一个位置,记录了该进程退出时候的各种信息。 僵尸进程主要是保留进程退出的现场,供父进程或者系统管理员进行分析使用的,所以僵尸进程是交由父进程来进行收集和释放的。...因为僵尸进程已经退出了,所以使用kill是没有用的,只能等待其父进程退出,才能真正的退出。 怎么查看僵尸进程呢?

    33410

    Linux守护进程的编程实现

    方法是在第1点的基础上,调用setsid()使进程成为会话组长: setsid(); 说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。...能够通过使进程不再成为会话组长来禁止进程又一次打开控制终端: if(pid=fork()) exit(0);//结束第一子进程,第二子进程继续(第二子进程不再是会话组长) 4....但对于某些进程,特别是server进程往往在请求到来时生成子进程处理请求。假设父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。...signal(SIGCHLD,SIG_IGN); 这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才干释放僵尸进程。 三....初始化程序中的init_daemon函数负责生成守护进程。读者能够利用init_daemon函数生成自己的守护进程。

    2.4K20

    AirPlay Deamon学习(Linux Daemon)

    如果该进程是一个进程组的组长,此函数返回错误。...方法是在第1点的基础上,调用setsid()使进程成为会话组长: setsid(); 说明:当进程是会话组长时setsid()调用失败。但第一点已经保证进程不是会话组长。...为防止这一点,将文件创建掩模清除:umask(0); 处理SIGCHLD信号 处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。...如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。...signal(SIGCHLD,SIG_IGN); 这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程。

    1.2K30
    领券