用python实现Linux系统编程——进程

本文介绍了如何使用Python进行Linux系统编程,重点关注进程的创建和管理。通过`os.fork()`函数创建进程,讨论了多进程、进程间通信、僵尸进程和孤儿进程的概念,以及`multiprocessing`模块在Windows系统上的应用。示例代码展示了如何创建、修改全局变量、使用进程池和队列进行进程间通信。
摘要由CSDN通过智能技术生成

1.1多任务引入

生活中一般是多项事情同时进行,歌手唱歌、跳舞同时进行,用程序模拟唱歌、跳舞,代码如下:

import time

def sing():

forx in range(3):

print("正在唱歌。。。")

 

def dance():

fory in range(3):

print("正在跳舞。。。")

 

def main():

sing()

dance()

 

if __name__ =="__main__":

main()

<<15_1.py>>

但是输出的是先唱歌3次,再跳舞3次(并不是同时进行)

1.2多任务的概念

多任务:同时进行多项事务,对计算机操作系统而言,就是同时运行多个任务(程序),真正的并行多任务只能在多核CPU上实现,实际的计算任务量远超过CPU核心数,操作系统通过调度算法,将多任务分配给每个核心,单核cpu执行的时候是采用时间片轮转的方式运行多个任务

 
1.3进程的创建-fork

1.进程vs程序

进程:需要分配到时间片、在内存空间中、有程序代码、被CPU执行

程序:保存在磁盘上的一段代码

 

2.fork()

Linux系统中可以调用系统fork()函数可以轻松创建进程

用fork()创建边唱歌、边跳舞的进程,示例代码:

import os,time

def sing():

forx in range(3):

print("正在唱歌%d"%x)

 

def dance():

fory in range(3):

print("正在跳舞%d"%y)

 

pid = os.fork()

if pid < 0:

print("fork调用失败!")

elif pid == 0:

print("进入子进程")

sing()

else:

print("进入父进程")

dance()

<<15_2.py>>

【注】os.fork()函数创建进程的时候先复制原有进程(父进程)到子进程,在父进程里返回值是创建的子进程的pid,在子进程里返回值是0,可以通过os.getpid()函数获取当前进程的pid,通过os.getppid()获取父进程的pid,调用一次,有两个返回值,fork()不能用于windows系统

 

示例代码:

import os

def main():

pid= os.fork()

ifpid < 0:

print("fork调用失败")

elifpid == 0:

print("进入子进程:")

print("当前进程pid=%d,父进程pid=%d"%(os.getpid(),os.getppid()))

print("在子进程中执行完毕")

else:

print("进入父进程执行")

print("当前进程的子进程pid=%d,父进程pid=%d"%(pid,os.getpid()))

print("父进程中运行完毕")

 

if __name__ =="__main__":

    main()

<<15_3.py>>

僵尸进程产生的原因:子进程运行结束,父进程尚未结束,并且未取回收子进程的资源就形成僵尸进程,僵尸进程保留这资源信息,以便父进程查找进程结束的原因

回收僵尸进程:在子进程后面调用os.wait()函数,os.wait()会阻塞父进程,(子进程没结束,父进程不会运行)

示例代码:(用fork产生僵尸进程)

import os

def main():

pid= os.fork()

ifpid < 0:

print("fork失败!")

elifpid == 0:

whileTrue:

print("进入子进程,子进程pid=%d,父进程是%d"%(os.getpid(),os.getppid()))

else:

print("进入父进程,父进程pid=%d,子进程pid=%d"%(os.getpid(),pid))

 

if __name__ =="__main__":

main()

<<fork产生僵尸进程.py>>

孤儿进程:子进程还在运行,父进程已经结束,就产生了孤儿进程,变成后台进程,不阻塞bash程序,不能接受用户输入,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值