700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux 僵尸进程deffunc 多进程-开启子进程的两种方式 查看进程的pid与ppid 僵尸进

linux 僵尸进程deffunc 多进程-开启子进程的两种方式 查看进程的pid与ppid 僵尸进

时间:2023-12-17 00:07:05

相关推荐

linux 僵尸进程deffunc 多进程-开启子进程的两种方式 查看进程的pid与ppid 僵尸进

一、开启子进程的两种方式

方式一:

# 方式一:

from multiprocessing import Process

import time

def task(name):

print("%s is running" % (name))

time.sleep(3)

print("%s is done" % (name))

if __name__ == '__main__':

# p = Process(target=task, kwargs={"name": "子进程1"}) # 参数以字典形式传入,kwargs={"name": "子进程1"} ,target表示调用对象,即子进程要执行的任务。

p = Process(target=task, args=("子进程1",)) # 参数以元组形式传入,args=("子进程1",) 必须要有逗号,target表示调用对象,即子进程要执行的任务。

p.start() # 仅仅只是给操作系统发送了一个信号

print("主")

运行输出:

子进程1 is running

子进程1 is done

方式二:

# 方式二

from multiprocessing import Process

import time

class MyProcess(Process):

def __init__(self, name):

super().__init__()

self.name = name

def run(self): # 固定形式,名字必须是 run

print("%s is running" % (self.name))

time.sleep(3)

print("%s is done" % (self.name))

if __name__ == '__main__':

p = MyProcess("子进程1")

p.start() # 调用start 实际上就是调用run,一定要叫run 不能叫其他名字

print("主")

运行输出:

子进程1 is running

子进程1 is done

二、查看进程的pid与ppid

通过 os.getpid() 获取pid

通过 os.getppid() 获取父进程pid

from multiprocessing import Process

import time

import os

def task(name):

print("%s is running, pid is:%s, ppid is:%s" % (name, os.getpid(), os.getppid()))

time.sleep(3)

print("%s is done, pid is:%s, ppid is:%s" % (name, os.getpid(), os.getppid()))

if __name__ == '__main__':

p = Process(target=task, args=("子进程1",))

p.start()

print("主进程,pid is:%s, 主进程的ppid is:%s" % (os.getpid(), os.getppid()))

运行输出:

主进程,pid is:9156, 主进程的ppid is:15936

子进程1 is running, pid is:15512, ppid is:9156

子进程1 is done, pid is:15512, ppid is:9156

三、僵尸进程与孤儿进程

僵尸进程:

我们知道父进程可以开启多个子进程,父进程会等待所有子进程都运行结束,程序才会终止,假如其中一个子进程运行完了之后就释放了自身所用到的资源,那么父进程再想去看这个子进程的状态的时候就午饭看到了,所以在Linux或Unix中为我们提供了一种数据结构就叫僵尸进程,所以子进程都要经历僵尸进程的状态,所有子进程死掉后,不会立即被清理,可能会有部分资源会被释放,但是子进程状态依然会被保留,留着尸体即僵尸进程,以便父进程来看的时候可以知道子进程的状态情况,由父进程为子进程收尸,父进程终止时,这些僵尸进程才会跟着被销毁,有害处,假如父进程一直不死,则僵尸进程会一直存在,占用pid或其他系统资源,最终可能导致无法创建新的进程。

孤儿进程:

是指父进程死掉了,但是子进程依然存在的情况,此时子进程没有父进程来管理了,便成了孤儿进程,会由init来接管回收,Linux上init是所有进程的爹。

孤儿进程无害,会由init进行回收。

linux 僵尸进程deffunc 多进程-开启子进程的两种方式 查看进程的pid与ppid 僵尸进程与孤儿进程...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。