当使用fork创建多个进程后,需要解决子进程回收的问题.wait和waitpid函数就是做这个工作的. 假设子进程没有合理的回收,可能会带来两个问题: 1.孤儿进程(父进程挂了,子进程活着),孤儿进程会被init进程回收,可以理解其没有危害,不会占用资源. 2.僵尸进程(子进程挂了,父进程活着),僵尸进程是当父进程活着时,子进程没有其他进程帮忙回收后产生的"有害进程",所以僵尸必须要回收,否则僵尸进程太多了会占用系统资源.此时就需要用到wait或waitpid函数. wait和wait…
1) 怎样使用 top 命令找出 Linux 中 CPU 占用高的进程 在所有监控 Linux 系统性能的工具中,Linux 的 top 命令是最好的也是最知名的一个.top 命令提供了 Linux 系统运行中的进程的动态实时视图.它能显示系统的概览信息和 Linux 内核当前管理的进程列表.它显示了大量的系统信息,如 CPU 使用.内存使用.交换内存.运行的进程数.目前系统开机时间.系统负载.缓冲区大小.缓存大小.进程 PID 等等.默认情况下,top 命令的输出结果按 CPU 占用进行排序,…
列出系统中 CPU 占用高的进程列表来确定.我认为只有两种方法能实现:使用 top 命令 和 ps 命令.出于一些理由,我更倾向于用 top 命令而不是 ps 命令.但是两个工具都能达到你要的目的,所以你可以根据需求决定使用哪个. 1 怎样使用 top 命令找出 Linux 中 CPU 占用高的进程 在所有监控 Linux 系统性能的工具中,Linux 的 top 命令是最好的也是最知名的一个.top 命令提供了 Linux 系统运行中的进程的动态实时视图.它能显示系统的概览信息和 Linux…
1 使用 ps 命令在 Linux 中查找内存消耗最大的进程 ps 命令用于报告当前进程的快照.ps 命令的意思是"进程状态".这是一个标准的 Linux 应用程序,用于查找有关在 Linux 系统上运行进程的信息. 它用于列出当前正在运行的进程及其进程 ID(PID).进程所有者名称.进程优先级(PR)以及正在运行的命令的绝对路径等. 下面的 ps 命令格式为你提供有关内存消耗最大进程的更多信息. # ps aux --sort -rss | head USER PID %CPU %…
1.如下代码所示 #include <unistd.h> #include <sys/types.h> #include <unistd.h> int main(int argc,char *argv[]) { pid_t child = fork(); ) { //error printf("\nfork child error."); exit(); } ){ //exit(0); ) printf("fork error\n"…
下面的命令会查看到按照RAM和CPU降序方式的前最高几名进程的列表: [root@iZ25pvjcsyhZ ~]# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head PID PPID CMD %MEM %CPU 1 0 /sbin/init 0.1 0.0 2 0 [kthreadd] 0.0 0.0 3 2 [migration/0] 0.0 0.0 4 2 [ksoftirqd/0] 0.0 0.0 5 2 [stopper/0] 0.0 0…
fork   使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process,但 parent process 的环境是不会因 child process 的改变而改变的. source   使用 source 方式运行 script 时, 就是让 script 在当前 process 内执行, 而不是产生一个 chil…
find的exec及ok命令 exec命令的格式为: exec command {} \; exec后面跟着的是操作命令,然后跟着{}表示每一个参数,然后空格,然后"\;".{}之后一定要跟一个空格,exec命令以:作为结束,为了表名:只是一个结束符,使用转义字符\加在:前面. ok命令和exec作用相同,唯一的区别在于ok是exec命令的安全模式,在执行command之前会给出提示. xargs命令 xargs命令需要结合管道符|使用,其格式为:** | xargs command…
僵尸进程的产生和避免,以及wait,waitpid的使用 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程.补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程. 僵尸进程是指的父进…
操作系统经典的三态如下: 1.就绪态 2.等待(阻塞) 3.运行态 其转换状态如下图所示: 操作系统内核中会维护多个队列,将不同状态的进程加入到不同的队列中,其中撤销是进程运行结束后,由内核收回. 以上的三态是操作系统原理中给出的,但是各个操作系统的平台实现这些状态的时候是有差异的,例如linux操作系统中进程的状态有以下几种: 1.运行状态(TASK_RUNNING) 2.可中断睡眠状态(TASK_INTERRUPTIBLE) 3.不可中断睡眠状态(TASK_UNINTERRUPTIBLE)…
在 Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的"僵尸"进程."僵尸"进程是一个早已 死亡的进程,但在进程表(processs table)中仍占了一个位置(slot).由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数 目太多,还会导致系统瘫痪. 我们知道,每个Unix进程在进程表里都有一个进入点(entry),核心程序执行该进程时使用到的一切信息都…
转载: http://www.cnblogs.com/Anker/p/3271773.html 1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧.晚上回来google了一下,再次参考APUE,认真总结一下,加深理解. 2.基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结…
转载自:http://www.cnblogs.com/Anker/p/3271773.html 一.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧.晚上回来google了一下,再次参考APUE,认真总结一下,加深理解. 二.基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结…
1 基本概述 1.1 孤儿进程和僵尸进程 父进程创建子进程后,较为理想状态是子进程结束,父进程回收子进程并释放子进程占有的资源:而实际上,父子进程是异步过程,两者谁先结束是无顺的,一般可以通过父进程调用wait()或waitpid()语句来等待子进程结束再退出. 孤儿进程:父进程结束后还有基于该父进程创建的子进程(一个或多个)尚没有结束,此时的子进程称之为孤儿进程:孤儿进程将被init进程(进程树中除了init都有父进程)接受,也就意味着init进程负责孤儿进程完成状态收集工作.一般而言,ini…
什么是PHP7中的孤儿进程与僵尸进程 基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态. 孤儿进程 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程…
说起fork就不得不提COW(Copy On Write),就是“写时拷贝”.也就是当fork发生时,子进程根本不会去拷贝父进程的内存页面,而是与父进程共享.当子进程或父进程需要修改一个内存页面时,Linux就将这个内存页面复制一份给修改者,然后再去修改,这样从用户的角度看,父子进程根本就没有共享什么内存.COW也就是进程要写共享的内存页面,先复制再改写. 采用了COW技术后,fork时,子进程还需要拷贝父进程的页面表.这种拷贝的代价就非常小了,对于CPU来说用不了几个时钟周期. 1.孤儿进程…
1.孤儿进程: 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作.孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作.每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程.这样,当一个孤儿进程凄凉地结束了其生命周期的时候,i…
linux提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到.这种机制就是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开文件,占用的内存等.但是仍然为其保留一定的信息(包括进程号.退出状态.运行时间等).直到父进程通过wait/waitpid来取时才释放. 孤儿进程:一个父进程退出,而它的一个或者多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作. 僵尸进程:一个进程使用fock…
如题 Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免? 一个进程在调用exit命令结束自己的生命的时候,其实他并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,他的作用是使进程退出,但是也仅仅限于一个正常的进程变成了一个僵尸进程,并不能完全将其销毁).在linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态信息供其他进程收集…
转载自:http://blog.sina.com.cn/s/blog_7776b9d3010144f9.html 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程. 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程…… 一个进程在调用exit…
本文内容: 1.僵尸进程,孤儿进程的定义,区别,产生原因,处理方法 2.wait函数,waitpid函数的分析,以及比较 背景:由于子进程的结束和父进程的运行是一个异步的过程,即父进程永远无法预测子进程什么时候结,所以就产生了孤儿进程和僵尸进程 定义: 孤儿进程:即父进程退出后,它的一个或多个子进程还在运行,那么这些子进程叫做孤儿进程 僵尸进程:如果子进程退出,但是父进程没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符pid仍然保存在系统中,那么该子进程叫做僵尸进程…
1. 基本概念: 孤儿进程:父进程退出,但是其子进程仍然在运行,那么这些子进程被称为孤儿进程:孤儿进程会被init进程收养,并作善后处理: 僵尸进程:一个已经终止,但是其父进程尚未对齐进行善后处理的进程被称为僵尸进程:ps命令状态为Z的进程: 善后处理:内核为每个终止子进程保存了一定量的信息,这些信息至少包括进程ID,该进程的终止状态,以及进程使用的CPU时间总量.如果父进程没有使用wait或者waitpid获取终止子进程有关信息,这些信息将一直保存,直到父进程处理后才能释放它仍占有的资源: 2…
僵尸进程 当子进程运行结束,父进程仍然继续运行,但父进程没有对子进程进行回收,释放子进程占用的资源,此时子进程就成为了一个僵尸进程. 在Unix进程管理中,如果新开的子进程运行结束,父进程将会收到一个SIGCHLD信号,子进程暂时成为僵尸进程,等待父进程进行处理.如果父进程一直不处理,该进程将会一直存在,占用系统进程表项,永久成为僵尸进程.如果僵尸进程过多,导致系统没有可用的进程表项,将无法运行其他的应用程序. <?php $str = "hello world!" . PHP_…
目录 1.top命令介绍 2.top命令示例 3.top命令输出项解释 4.top命令常用的实例 1.top命令介绍 top命令是用来动态显示系统中进程的命令. [root@localhost ~]# top [选项] 选项: -d秒数:指定top命令每隔几秒更新.默认是3秒. -b:使用批处理模式输出.一般和"-n"选项合用,用于把top命令重定向到文件中. -n次数:指定top命令执行的次数.一般和"-b"选项合用. -p:指定PID.只查看某个PID的进程.…
前段时间,一哥们,去杀Linux服务器的进程,发现kill命令失灵了,怎么杀都杀不死. 然后上网查了下资料,原来是要被杀的进程,成为了僵尸进程. 僵尸进程的查看方法: 利用命令ps,可以看到有标记为Z的进程就是僵尸进程. 知道了原因,就想怎么去把这个僵尸进程干掉.网上说了两种方法,一种最简单的方法,重启服务器,相当于清理内存了.方法很简单,但是不是很实用,因为服务器,不是你一个人在用,服务器是不能随随便便重启的.第二种方法,杀掉其父进程,父进程干掉后,该僵尸进程也就消失了. 可以用  ps -e…
今天在维护服务器的时候,发现有5个nova-novncproxy的僵尸进程. 26327 ?        S      0:05  \_ /usr/bin/python /usr/bin/nova-novncproxy --config-file=/etc/nova/nova.conf  4765 ?        Z      0:00      \_ [nova-novncproxy] <defunct>  4766 ?        Z      0:00      \_ [nova-…
Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cutler  Linux读写内存数据的三种方式 台湾作家林清玄在接受记者采访的时候,如此评价自己30多年写作生涯:“第一个十年我才华横溢,‘贼光闪现’,令周边黯然失色:第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰:进入第三个十年,繁华落尽见真醇,我进入了‘醇光初现’的阶段,真正…
1) 检查当前僵尸进程信息 # ps -ef | grep defunct | grep -v grep | wc -l 175 # top | head -2 top - 15:05:54 up 97 days, 23:49, 4 users, load average: 0.66, 0.45, 0.39 Tasks: 829 total, 1 running, 479 sleeping, 174 stopped, 175 zombie # ps -ef | grep defunct | gr…
什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息.这些信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间,所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息. 而僵尸进程就是指:一个进程执行了exit系统调用退出,而其父进程并没有为它收尸(调用wait或waitpid来获得它的结束状态)的进程. 任何一个子进程(init除外)在exit后并非马上就消失,而是留…
什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息.这些 信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间,所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息. 而僵尸进程就是指:一个进程执行了exit系统调用退出,而其父进程并没有为它收尸(调用wait或waitpid来获得它的结束状态)的进程. 任何一个子进程(init除外)在exit后并非马上就消失,而是…