僵尸进程

并发编程

Deadly 提交于 2020-02-01 01:12:22
目录 并发编程 并发编程 什么是进程 进程与程序 PID和PPID PID PPID 并发与并行,阻塞与非阻塞 进程相关理论知识 进程的创建 进程的销毁 进程的层次结构 python中开启子进程的两种方式 进程间内存相互隔离 join()函数 Process对象的常用属性 孤儿进程与僵尸进程 什么是亚索进程 什么是僵尸进程 僵尸进程的危害 并发编程 并发编程 并发指的是多个任务同时被执行,并发编程指的是编写出支持多任务并发的应用程序所在. 在我们写的TCP通讯中,服务器建立连接后需要一个循环来重复收发文件和下载文件的过程,但是服务器并不知道客户端会在什么时候发来数据,这样服务器就会一直处在于一个等待的状态,此时的服务器无法与外界客户端相连接,所以并发编程就应运而生了,并发编程的原理就是让程序处理多个任务,且多个任务可同时运行 什么是进程 进程指的是正在运行的程序,一台电脑可以同时运行多个进程,这些同时运行的进程是由操作系统来统一分配资源,那么在运行多个程序的电脑就是在多进程进行任务 进程指的是并发的一种方式,在学习并发变成之前要先了解进程的基本概念以及多进程的实现原理,这就不得不提到操作系统了,因为进程的概念来自于操作系统,指的是在操作系统中运行的程序 进程与程序 程序是正在运行的程序,也就是一堆代码,当它被加载到CPU中去执行的时候,就有了进程这个概念 需要注意的是

02.查询并杀死僵尸进程

坚强是说给别人听的谎言 提交于 2020-01-28 03:15:23
1、查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程。 2、定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |grep -e ' 1 '定位僵尸进程以及该僵尸进程的父进程 僵尸进程ID:3457,父进程ID:3425 僵尸进程ID:3533,父进程ID:3511 3、使用Kill -HUP 僵尸进程ID来杀死僵尸进程,往往此种情况无法杀死僵尸进程,此时就需要杀死僵尸进程的父进程 kill -HUP 僵尸进程父ID 4、参数解读 ps -A -ostat,ppid,pid,cmd |grep -e ‘ 2 ’ -A 参数列出所有进程 -o 自定义输出字段 stat(状态)、ppid(进程父id)、pid(进程id)、cmd(命令) 因为状态为z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程 Zz ↩︎ Zz ↩︎ 来源: CSDN 作者: meiquanGao 链接: https://blog.csdn.net/qq_43718903/article/details/104036531

linux杀死僵尸进程

不想你离开。 提交于 2020-01-28 01:11:29
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9 1、查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程。 2、定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]'定位僵尸进程以及该僵尸进程的父进程 僵尸进程ID:3457,父进程ID:3425 僵尸进程ID:3533,父进程ID:3511 3、使用Kill -HUP 僵尸进程ID来杀死僵尸进程,往往此种情况无法杀死僵尸进程,此时就需要杀死僵尸进程的父进程 kill -HUP 僵尸进程父ID 然后使用上面的语句查询该僵尸进程是否被杀死 4、参数解读 ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]' -A 参数列出所有进程 -o 自定义输出字段 stat(状态)、ppid(进程父id)、pid(进程id)、cmd(命令) 因为状态为z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程 -------------------------------------------------------------------------------------------

记一次僵尸进程的处理

∥☆過路亽.° 提交于 2020-01-19 16:07:41
(1)监控报警可用内存不足: (2)登录服务查看 缓存占用的内存并不多 (3)top查看一下系统整体状态 发现10个僵尸进程 linux 下 取进程占用 cpu 最高的前10个进程 ps aux | head -1 ; ps aux | grep -v PID | sort -rn -k +3 | head linux 下 取进程占用 内存mem 最高的前10个进程 ps aux | head -1 ; ps aux | grep -v PID | sort -rn -k +4 | head (4)找出状态位z的进程 shell>ps -aux | (5)根据僵尸进程的描述筛选 找到了所有的僵尸进程,如果要杀死僵尸进程,最好找到父进程,然后干掉,直接杀僵尸进程可能杀不掉 (6)找到僵尸进程的父进程 干掉 来源: 51CTO 作者: TangYGao 链接: https://blog.51cto.com/7603402/2467833

TCP连接的建立和终止

杀马特。学长 韩版系。学妹 提交于 2020-01-19 07:53:50
刚看完 UNIX 第五章内容,我想按照自己的方式将自己获得的知识梳理一遍,以便日后查看!先贴上一段简单的 TCP 服务器端代码: 1 #include <sys/socket.h> 2 #include <netinet/in.h> 3 #include <stdio.h> 4 #include <error.h> 5 #include <unistd.h> 6 #include <string.h> 7 #include <stdlib.h> 8 9 #define MAXLINE 5 10 #define SA struct sockaddr 11 int main() 12 { 13 int listenfd, connfd; 14 pid_t childpid; 15 int readn, writen; 16 socklen_t clilen; 17 char buf[MAXLINE]; 18 struct sockaddr_in servaddr, cliaddr; 19 //创建监听套接字 20 if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 21 { 22 printf("socket() error!"); 23 exit(0); 24 } 25 //先要对协议地址进行清零 26 bzero(

转]Linux杀死进程方法大全

故事扮演 提交于 2020-01-07 07:47:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 2010年2月24日 乌帮图 发表评论 阅读评论 杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志。 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通常都能达到目的。终止有问题的进程,并把进程的资源释放给系统。然而,如果进程启动了子进程,只杀死父进程,子进程仍在运行,因此仍消耗资源。为了防止这些所谓的“僵尸进程”,应确保在杀死父进程之前,先杀死其所有的子进程。 确定要杀死进程的PID或PPID # ps -ef | grep httpd 以优雅的方式结束进程 # kill -l PID -l选项告诉kill命令用好像启动进程的用户已注销的方式结束进程。当使用该选项时,kill命令也试图杀死所留下的子进程。但这个命令也不是总能成功–或许仍然需要先手工杀死子进程,然后再杀死父进程。 TERM信号 给父进程发送一个TERM信号,试图杀死它和它的子进程。 # kill -TERM PPID killall命令 killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。 killall httpd 停止和重启进程 有时候只想简单的停止和重启进程。如下: # kill -HUP PID

干掉僵尸进程

ε祈祈猫儿з 提交于 2019-12-29 18:27:30
最近,写了一个pcap方面的程序,程序启动的时候,有守护进程监控,会重启; 程序本身会多线程监控所有活动的网卡,同时用俩个线程,一个做超时检查,一个做连接状况显示; 今天在替换的时候,发现有僵尸进程这种情况出现,因为内部用了大量的sleep,可能你kill主线程的时候,子线程还在休眠,造成这种现象; 现在描述一下,怎么干掉僵尸进程,从而替换程序; 1,先替换执行程序,用mv,不能用cp,cp会提示说: cp: cannot create regular file './dev_list_server': Text file busy 2,确定僵尸进程相关信息: ps -e -o stat,ppid,pid,cmd | egrep '^[Zz]' 3,可能需要用这个命令: ps -ef | grep "defunct" 4,将所有显示出来的子进程kill掉; 5,这样,守护进程重启的时候,就会启动,你已经替换过的执行程序。 网上说,我这种情况是理想情况,描述如下:   通过结束父进程从而结束僵尸进程,这只能算是一个比较理想的情况 ,很多时候遇到僵尸进程我们不能结束父进程,比如父进程是init进程,那一旦结束父进程,整个系统就挂掉了,这时候则可以考虑挂起子进程,这相当于“曲线救国”。一个进程一旦挂起就相当于“什么都不做了”。可以通过执行如下命令来挂起进程。 kill -HUP

从Linux内核谈僵尸进程

折月煮酒 提交于 2019-12-24 23:00:23
僵尸进程 摘自百度百科: 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程…… 僵尸进程的危害 由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 那么会不会因为父进程太忙来不及wait子进程,或者说不知道 子进程什么时候结束,而丢失子进程结束时的状态信息呢? 不会。因为UNⅨ提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是: 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU

python 并发编程-- 多进程

风格不统一 提交于 2019-12-23 04:34:17
一 multiprocessing 模块介绍      python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程   Python提供了multiprocessing。  multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。    multiprocessing模块的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。  需要再次强调的一点是:与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内。 二 Process类的介绍 from multiprocessing import Process Process([group[,target[,name[,args[,kwargs]]]]]) 由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)强调:1.需要使用关键字的方式来指定参数2.args 指定的为传给 target(目标,对象) 函数的位置参数,是一个元祖形式,必须有逗号参数介绍:1.group 参数未使用,值始终设计 None2.target 表示调用对象,即子进程要执行的任务3.args

僵尸进程的产生和避免,如何kill杀掉linux系统中的僵尸defunct进程

百般思念 提交于 2019-12-21 00:30:07
在 Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已 死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数 目太多,还会导致系统瘫痪。 我们知道,每个Unix进程在进程表里都有一个进入点(entry),核心程序执行该进程时使用到的一切信息都存储在进入点。当用ps命令察看系统中的进程信息时,看到的就是进程表中的相关数据。当以fork()系统调用建立一个新的进程后,核心进程就会在进程表中给这个新进程分配一个进入点,然后将相关信息存储在该进入点所对应的进程表内。这些信息中有一项是其父进程的识别码。当这个进程走完了自己的生命周期后,它会执行exit()系统调用,此时原来进 程表中的数据会被该进程的退出码(exit code)、执行时所用的CPU时间等数据所取代,这些数据会一直保留到系统将它传递给它的父进程为止。由此可见,defunct进程的出现时间是在子进 程终止后,但是父进程尚未读取这些数据之前。 defunct进程是不能直接kill -9杀掉的,否则就不叫僵尸进程了。 知道了defunct进程产生的原因,就可以轻易的kill掉defunct进程。 方法有二: