- 浏览: 1476988 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
目的是父进程异步等待,子进程不变僵尸进程,(让子进程属于init)
。如果一个进程要f o r k一个子进程,但不要求它等待
子进程终止,也不希望子进程处于僵死状态直到父进程终止,实现这一要求的诀窍是调用fork
两次。
在第二个子进程中调用s l e e p以保证在打印父进程I D时第一个子进程已终止。在f o r k之后,
父、子进程都可继续执行——我们无法预知哪一个会先执行。如果不使第二个子进程睡眠,则
在fork之后,它可能比其父进程先执行,于是它打印的父进程I D将是创建它的父进程,而不是init进程
。如果一个进程要f o r k一个子进程,但不要求它等待
子进程终止,也不希望子进程处于僵死状态直到父进程终止,实现这一要求的诀窍是调用fork
两次。
在第二个子进程中调用s l e e p以保证在打印父进程I D时第一个子进程已终止。在f o r k之后,
父、子进程都可继续执行——我们无法预知哪一个会先执行。如果不使第二个子进程睡眠,则
在fork之后,它可能比其父进程先执行,于是它打印的父进程I D将是创建它的父进程,而不是init进程
#include <sys/wait.h> #include <stdio.h> #include <stdlib.h> int main(void) { pid_t pid; if ((pid = fork()) < 0) { printf("fork error"); } else if (pid == 0) { /* first child */ if ((pid = fork()) < 0) printf("fork error"); else if (pid > 0) exit(0); /* parent from second fork == first child */ /* * We're the second child; our parent becomes init as soon * as our real parent calls exit() in the statement above. * Here's where we'd continue executing, knowing that when * we're done, init will reap our status. */ sleep(2); printf("second child, parent pid = %d\n", getppid()); exit(0); } if (waitpid(pid, NULL, 0) != pid) /* wait for first child */ printf("waitpid error"); /* * We're the parent (the original process); we continue executing, * knowing that we're not the parent of the second child. */ exit(0); }
发表评论
-
weak_ptr解决循环引用问题
2021-03-08 21:12 1170C++11引入的三种智能指 ... -
gcc链接顺序
2019-10-12 18:25 631代码在 https://github.com/killinux ... -
c++11的function和bind
2019-09-10 16:12 532参考:https://www.cnblogs.co ... -
opengl的helloworld
2014-10-22 19:41 9021.我提供一个不需要配置环境就可运行的源码。 glut.h放在 ... -
画图板用c++实现和用js实现的websocket版本
2014-10-17 13:02 2129画图板 opencv的c++ #include <o ... -
c语言内存
2014-07-02 10:26 6941、C中内存分为五个区 栈:用来存放函数的形参和函数内的局部变 ... -
重定向stdout到文件
2014-03-05 18:37 5484把stdout重定向到文件 两种方法: 第一种方法没有恢复 ... -
通过nginx远程执行shell
2014-03-03 10:26 5083saltstack远程执行shell,远程管理等返回json已 ... -
c的urldecode
2014-02-28 18:22 1363#include <stdio.h> #in ... -
pthread的pthread_mutex_lock 的使用
2014-02-25 16:54 26142参考http://haoningabc.iteye.com/b ... -
c调用c++
2013-10-12 15:24 1177参考 http://www.cppblog.com/frank ... -
用C语言,实现接收管道输出的结果,并显示
2013-04-23 21:35 1946在shell里利用“|”管道干的事情就是io重定向,把“|”命 ... -
关于char * 与 char[]
2013-04-22 21:56 961问题引入: 在实习过程中发现了一个以前一直默认的错误,同样ch ... -
单向链表翻转
2012-12-25 23:41 1019临时笔记,创建一个链表 #include <stdl ... -
trie 树 的代码
2012-12-14 23:20 1139想起搜狐老大的一句话 看代码先看h文件,擦,当初感觉他这句话很 ... -
指针函数与函数指针的区别
2012-12-14 22:44 1195一、 1、指针函数是指带指针的函数,即本质是一个函数。函数返回 ... -
指针和数组
2012-11-14 22:40 1066转载http://kan.weibo.com/con/3512 ... -
js备份
2012-10-31 23:56 1725<!DOCTYPE HTML PUBLIC " ... -
线程的helloworld
2012-10-30 21:51 1603#include<stdio.h> #inc ... -
c的书籍
2012-10-30 10:56 1128http://www.acm.uiuc.edu/webmonk ...
相关推荐
僵尸进程是计算机操作系统中的一种特殊状态,当一个进程执行完毕并退出,但其父进程尚未读取其退出状态时,这个已结束的进程就会成为僵尸进程。它的主要特征是进程已不再执行任何代码,但其进程描述符仍然存在于内存...
例如,在fork一个子进程之后,父进程需要通过wait或waitpid函数来回收子进程的状态信息,以免子进程变成僵死进程。 在实际应用中,僵死进程可能会导致系统资源的浪费,例如内存、CPU时间等。因此,我们需要注意避免...
2. **重启系统**:重启系统可以清除所有僵尸进程。 3. **使用`kill`命令**:使用`kill -9`命令可以直接终止父进程,从而间接地清除僵尸进程。 #### 六、示例代码分析 下面是一个简单的示例代码,演示了如何创建...
本文将深入探讨消除僵尸进程的两种常用方法,并通过示例代码文件`no_zombie1.c`和`no_zombie2.c`进行解释。 ### 方法一:父进程主动回收 当子进程终止时,操作系统会向父进程发送一个`SIGCHLD`信号,提示子进程的...
### 谈谈守护进程和僵尸进程 #### 守护进程与僵尸进程的概念及应用场景 在深入探讨守护进程和僵尸进程之前,我们先简要回顾一下这两种进程的基本概念及其应用场景。 - **守护进程**(Daemon Process):是在后台...
5. **僵尸进程与孤儿进程**: 如果父进程不等待子进程结束,子进程成为僵尸进程。孤儿进程是指其父进程先于它结束,会被init进程收养并等待清理。 **使用`fork()` 的场景** 1. **并发处理**: 父进程可以创建多个子...
进程池start()后,需要调用wait()进行僵尸进程回收,可以无阻塞调用 获取进程状态(调用isAlive()方法)前,最好调用一个无阻塞的wait(false)进行一次回收,由于进程运行状态的判断不是原子操作,所以...
"Linux安全攻略——僵尸进程" Linux安全攻略——僵尸进程.pdf中讨论了Linux操作系统中的进程管理机制,包括进程的概念、进程调度、进程树、进程标识符、进程生命周期等方面的知识点。 进程概念 在Linux操作系统中...
我们可以使用如下几种方法避免僵尸进程的产生: 1.在fork后调用wait/waitpid函数取得子进程退出状态。 2.调用fork两次(第一次调用产生一个子进程,第二次调用fork是在第一个子进程中调用,同时将父进程退出(第一...
在编程实践中,应当注意当子进程完成后要进行适当的回收处理,避免产生僵尸进程。父进程可以通过wait()或者waitpid()系统调用来回收已经完成的子进程资源。总之,掌握pcntl_fork的使用能够帮助PHP开发者编写出更加...
僵尸进程是子进程已经结束运行,但其父进程尚未对其进行回收的进程,其进程描述符仍然存在于系统中。这种状态下的进程虽不再占用实际的资源,但会消耗系统的进程表项资源,过多的僵尸进程将导致系统资源的浪费,甚至...
基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。...僵尸进程 一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程
清单2展示了`fork()`的简单使用示例,调用`fork()`后,父进程和子进程都会继续执行,但每个进程会得到不同的返回值,子进程得到0,而父进程得到子进程的PID。 创建新进程后,子进程可以进一步通过`execve(2)`系统调...
如果不等待子进程结束,子进程将成为僵尸进程,占用系统资源。 7. 实战示例:编写一个简单的`fork()`程序,展示父进程创建子进程的过程,可以使用`printf()`输出不同的消息,以便观察哪个是父进程,哪个是子进程。 ...
然而,多进程编程也带来了一个潜在问题,那就是“僵尸进程”。僵尸进程是指子进程在完成其工作并退出后,其父进程没有及时回收其资源,导致进程表项仍然占用,从而影响系统性能。本文将深入探讨如何在PHP中防止多...
在回收子进程之前,子进程会变成僵尸进程。为了避免资源泄露,父进程应该及时回收其所有子进程。 7. 全局变量和局部变量在fork之后的行为: 由于fork()创建的新进程是调用进程的副本,所以父进程中的全局变量和局部...
- 使用`pcntl`扩展进行多进程编程时,需要注意进程的同步问题,确保父进程能正确回收子进程资源,避免产生僵尸进程。 - 对于多子进程的创建和管理,应合理安排父进程对子进程的等待时机,避免程序逻辑的错误。 - 在...
僵尸进程是指子进程已经结束,但父进程尚未对其进行回收的状态,这种情况如果没有得到妥善处理,将导致系统资源的浪费。 在Linux中,内存泄漏是指程序在申请内存后未能释放或者未能正确释放,导致随着时间的推移,...