僵尸进程

pcb、僵尸进程、孤儿进程

一个人想着一个人 提交于 2019-11-28 20:12:30
pcb的引出: 程序运行起来被加载到内存中,且计算机可能运行很多进程,而且每个进程之间又相互独立互不影响;那么操作系统又是如何管理这些进程的;这是因为操作系统将进程的信息都存放在一个结构体中;而操作系统通过这个结构体对进程的信息的描述来管理进程;这个结构体叫pcb; pcb --进程信息块(process control block) 在Linux 操作系统中的pcb是struct task_struck结构体(双向链表组织的);task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。 pcb中都包含了哪些进程信息: 进程ID:每个进程都有唯一的进程ID,计算机可能存在多个进程,这些进程都有唯一标识符。 内存描述符:mm_struct结构体的地址 程序计数器:保存代码如今运行到哪个位置,下步即将运行代码指令位置。 上下文数据:多个进程之间可能会相互进行切换,但是又必须记住该进程切换之前的相关信息,所以需要有上下文记录它。 进程优先级:.操作系统会调度进程执行相关操作,调度这些进程先后顺序,所以里面应该含有表示进程优先级的数据。 进程状态:进程如今是哪种状态 I/O状态信息; 信号相关信息; 记账信息: 僵尸进程: 僵尸进程:处于僵死状态的进程,进程退出了,但是资源没有完全释放会产生资源泄露; 僵尸进程产生原因:子进程先于父进程退出

并发编程:多进程

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

互斥锁 僵尸进程与孤儿进程

Deadly 提交于 2019-11-28 04:47:58
一:僵尸进程与孤儿进程(面试会问到) ​ 主进程需要等待子进程结束后,主进程才结束, 主进程时刻监测子进程的运行状态,当子进程结束之后,过一段时间将子进程回收 1.为什么主进程不在子进程结束后立马对其回收呢? 主进程与子进程是异步关系,主进程无法捕获子进程什么时候结束 如果子进程结束之后马上释放资源,主进程就无法监测子进程的状态(子进程立马死掉,不热乎了就没办法了) 2.unix 针对上面的内容提供了一个机制 所有子进程结束后,立马释放掉文件的操作链接,内存的大部分数据,但是会保留一个内容 :进程号、结束时间、运行状态 3.僵尸进程 所有的子进程结束之后,在被主进程回收之前,都会进入僵尸状态 4.僵尸进程有无危害 如果父进程不对子进程进行回收,产生大量的僵尸进程,这样就会占用内存,占用进程 pid 号 5.孤儿进程 父进程由于某种原因结束了,但是你的子进程还在运行中,这样你的子进程就成为了孤儿进程,但是如果你的父进程结束了,你的所有孤儿进程就会被 init 进程回收,对你进行回收 init 就是充当了生活中的孤儿院 6.僵尸进程如何解决(直接杀死父进程) 父进程产生大量子进程,但是不作为不回收,这样就会形成大量的僵尸进程,解决方式就是直接杀死父进程,将所有的僵尸进程变成孤儿进程,由 init 回收 二:互斥锁(保证数据安全,自己加锁容易死锁) 三个同事 同时用一个打印机打印内容.

Python并发编程03/僵尸孤儿进程,互斥锁,进程之间的通信

六眼飞鱼酱① 提交于 2019-11-28 04:14:45
目录 Python并发编程03/僵尸孤儿进程,互斥锁,进程之间的通信 1.昨日回顾 2.僵尸进程和孤儿进程 2.1僵尸进程 2.2孤儿进程 2.3僵尸进程如何解决? 3.互斥锁,锁 3.1互斥锁的应用 3.2Lock与join的区别 4.进程之间的通信 进程在内存级别是隔离的 4.1基于文件通信 (抢票系统) 4.2基于队列通信 Python并发编程03/僵尸孤儿进程,互斥锁,进程之间的通信 1.昨日回顾 1.创建进程的两种方式: 函数, 类. 2.pid: os.getpid() os.getppid() tasklist tasklist| findstr 进程名 3.进程与进程之间是有物理隔离: 不能共享内存的数据.(lock,队列) 4.join阻塞: 让主进程等待子进程结束之后,在执行. 5.其他属性: terminate() is_alive() name, 6.守护进程: 将子进程设置成守护进程,当主进程结束了,子进程就马上结束. 2.僵尸进程和孤儿进程 2.1僵尸进程 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵尸进程. #基于unix环境(linux,macOS) #主进程需要等待子进程结束之后,主进程才结束

Linux性能优化从入门到实战:04 CPU篇:CPU使用率

时间秒杀一切 提交于 2019-11-28 01:24:53
   CPU使用率 是单位时间内CPU使用情况的统计,以百分比方式展示。 $ top top - 11:46:45 up 7 days, 11:52, 1 user, load average: 0.00, 0.01, 0.00 Tasks: 198 total, 1 running, 197 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4044232 total, 420136 free, 1061244 used, 2562852 buff/cache KiB Swap: 1046524 total, 1043128 free, 3396 used. 2619124 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 921 root 20 0 531332 138408 58972 S 0.7 3.4 41:31.24 Xorg    参数解析 如下: %user(us),代表用户态 CPU 时间。不包括下面的 nice 时间,但包括了 guest 时间。 %nice(ni),代表低优先级用户态 CPU 时间,也就是进程的

python多进程

自闭症网瘾萝莉.ら 提交于 2019-11-27 18:35:10
一、进程的创建方式 1. os.fork import os # 创建子进程,调用一次fork会返回两次pid,如果当前是运行在父进程当中则为子进程的进程号,如果是在子进程当中则为0,发生错误抛出OSError异常 pid = os.fork()    if pid == 0:   print('Here is son process')   print(os.getpid(), os.getppid())  # getppid: 获取父进程进程号 else:   print('Here is main process')   print(os.getpid())  # 获取当前进程号  os.wait() # 主进程等待子进程结束释放资源 --------------------------------------- 我是分割线 ------------------------------------- os.kill(pid, signal): 发送一个信号给pid进程 os.wait(): 等待任何一个子进程的结束,返回一个tuple,包含子进程进程号、退出状态信息 os.waitpid(pid, options): 等待指定进程号的子进程结束,返回一个tuple同wait。   - pid:       pid = 0,等待并获取当前进程组中的任何子进程的值;      

Centos系统杀死僵尸进程

北慕城南 提交于 2019-11-26 01:56:00
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9 定位僵尸进程以及该僵尸进程的父进程 ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]' 使用Kill -HUP 僵尸进程ID来杀死僵尸进程,往往此种情况无法杀死僵尸进程,此时就需要杀死僵尸进程的父进程 kill -HUP 僵尸进程父ID 然后使用上面的语句查询该僵尸进程是否被杀死 ps -A -ostat,ppid,pid,cmd |grep -e '^[Zz]' 参数解读 -A 参数列出所有进程 -o 自定义输出字段 stat(状态)、ppid(进程父id)、pid(进程id)、cmd(命令) 因为状态为z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程 来源: 51CTO 作者: 思考_ 链接: https://blog.51cto.com/10880347/2442765