python中exec是什么意思_Python中的进程分支fork和exec详解

在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支.

1.fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独立父进程外运行.

2.fork()是一个很特殊的方法,一次调用,两次返回.

3.fork()它会返回2个值,一个值为0,表示在子进程返回;另外一个值为非0,表示在父进程中返回子进程ID.

以下只能在linux中运行,不能在window下运行.

进程分支fork()

实例如下:

复制代码 代码如下:

#!/usr/bin/python

#coding=utf-8

import os

def child():

print('hello from child', os.getpid())

os._exit(0)

def parent():

pid = os.fork()

if pid == 0:

child()

print 'fork child process error!'#如果打印该字符串,说明调用child()出错

else:

print('hello from parent', os.getpid(), pid)

parent()

运行结果如下:

复制代码 代码如下:

('hello from parent', 29888, 29889)

('hello from child', 29889)

从结果不难看出, child()后的print字符并没有打印处理,说明调用child()是没有返回的.

fork和exec的组合

从上面的例子来看,调用child()方法后就直接退出了.但在实际的应用中,我们希望分支出来的子进程能独立运行另外一个新的程序.这时需要用到exec方法替换子进程,并且替换后进程的pid不会改变.exec方法不会返回.

首先解释一下exec相关的8个方法组:

os.execv(program, cmdargs)

基本的”v”执行形式,需要传入可执行的程序名,以及用来运行程序的命令行参数字符的列表或元组.

os.execl(program, cmdarg1, cmdarg2, …, cmdargN)

基本的”l”执行形式,需要传入可执行的程序名,以及用来运行程序的命令行多个字符参数.

os.execvp(program, args)

“p”模式下,基本的”v”执行形式,需要传入可执行的程序名,以及用来运行程序的命令行参数字符的列表或元组.运行新程序的搜索路径为当前文件的搜索路径.

os.execlp(program, cmdarg1, cmdarg2, …, cmdargN)

“p”模式下,基本的”l”执行形式,需要传入可执行的程序名,以及用来运行程序的命令行多个字符参数.运行新程序的搜索路径为当前文件的搜索路径.

os.execve(program, args, env)

“e”模式下,基本的”v”执行形式,需要传入可执行的程序名,以及用来运行程序的命令行参数字符的列表或元组.最后还要传入运行新程序的需要的环境变量env字典参数.

os.execle(program, cmdarg1, cmdarg2, …, cmdargN, env)

“e”模式下,基本的”l”执行形式,需要传入可执行的程序名,以及用来运行程序的命令行多个字符参数.最后还要传入运行新程序的需要的环境变量env字典参数.

os.execvpe(program, args, env)

在”p”和”e”的组合模式下,基本的”v”执行形式,需要传入可执行的程序名,以及用来运行程序的命令行参数字符的列表或元组.最后还要传入运行新程序的需要的环境变量env字典参数.运行新程序的搜索路径为当前文件的搜索路径.

os.execlpe(program, cmdarg1, cmdarg2, …, cmdargN, env)

在”p”和”e”的组合模式下,基本的”l”执行形式,需要传入可执行的程序名,以及用来运行程序的命令行多个字符参数.最后还要传入运行新程序的需要的环境变量env字典参数.运行新程序的搜索路径为当前文件的搜索路径.

newprocess.py代码如下:

复制代码 代码如下:

#!/usr/bin/python

#coding=utf-8

import os

def child():

print('hello from child', os.getpid())

os._exit(0)

child()

主代码如下:

复制代码 代码如下:

#!/usr/bin/python

#coding=utf-8

import os

def child():

print('hello from child', os.getpid())

os._exit(0)

def parent():

pid = os.fork()

if pid == 0:

os.execlp('python', 'python', 'newprocess.py')

assert False, 'fork child process error!'

else:

print('hello from parent', os.getpid(), pid)

parent()

输出如下:

复制代码 代码如下:

$ python TestFork.py

('hello from parent', 30791, 30792)

$ ('hello from child', 30792)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java冒泡排序原理_冒泡排序原理及其java实现

冒泡排序原理:临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样外层循环每循环一次,都会把一个数的顺序排好(从小到大的话每次都会把上回剩余的数据最大的放在剩余数的最后面,反之则是最小的放剩余…

java holder_java.sql.SQLException: connection holder is null

错误信息2017-11-15 14:53:16.931 [ ] ERROR com.hzcf.flagship.web.AssetPlanController 126 :### Error updating database. Cause: java.sql.SQLException: connection holder is null### Cause: java.sql.SQLException: connection holder is null; uncategorized SQLExcep…

java signed_如何从java中的字节读取signed int?

我有一个规范读取接下来的两个字节是signed int.要在java中读取我有以下内容当我使用以下代码在java中读取signed int时,我得到值65449计算无符号的逻辑int a (byte[1] & 0xff) <<8int b (byte[0] & 0xff) <<0int c ab我认为这是错误的,因为如果我和0xff我…

android 删除文件 代码_代码审计之某系统后台存在任意删除文件

本文作者&#xff1a;霾团队交流群&#xff1a;673441920-----------------------------------------------------------前言POC镇楼&#xff01;&#xff01;&#xff01;POST 漏洞演示过程&#xff1a;首先我们利用D盾监听下我们的项目以外的目录。这里刚刚我们创建了这个文件…

ubuntu java8 java9_在Ubuntu/Debian系统上安装Java 9的方法

本文介绍在Ubuntu/Debian系统上安装Oracle Java 9的方法&#xff1a;使用webupd8team/java PPA&#xff0c;相同的PPA提供了Java 8和Java 7等旧版Java的软件包&#xff0c;如果你的应用程序需要这个&#xff0c;可以随意安装它们。要安装新版本可参考在Ubuntu 18.04系统上安装J…

websocket 压力测试_打造最强移动测试平台

笔者今年换掉了服役N年的旧手机&#xff0c;新手机12G的RAM&#xff0c;比自用的本子内存都大&#xff0c;如果只是玩游戏感觉不能完全发挥出全部机能&#xff0c;但又因为怕影响日常使用没有进行root&#xff0c;经过一番折腾&#xff0c;发现即使不root也不影响把它变成一款测…

python银行系统模拟演练_python多线程实现代码(模拟银行服务操作流程)

1.模拟银行服务完成程序代码目前&#xff0c;在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统&#xff0c;该系统完全模拟了人群排队全过程&#xff0c;通过取票进队、排队等待、叫号服务等功能&#xff0c;代替了人们站队的辛苦。排队叫号软件的具体操作流程为&…

字符串左侧补0_(48)C++面试之最长不含重复字符的子字符串(动态规划)

// 面试题48&#xff1a;最长不含重复字符的子字符串// 题目&#xff1a;请从字符串中找出一个最长的不包含重复字符的子字符串&#xff0c;计算该最长子// 字符串的长度。假设字符串中只包含从a到z的字符。#include <vector> #include <string> #include <iost…

jp摩根的人都在学python么_摩根大通已要求所有资管部门员工必须学习编程

当代最具竞争力的技能是什么&#xff1f;摩根大通CEO告诉你---编程。今年新加入摩根大通的全部资产管理分析师必须强制学习编程语言&#xff0c;Python。摩根大通资管经理Mary Callahan Erodes表示“现代资产管理的唯一语言是编程语言”。因为强制普及编程语言&#xff0c;现在…

java exec 关闭_如何正确关闭java ExecutorService

从ExecutorService的 Oracle API文档页面推荐的方法&#xff1a;void shutdownAndAwaitTermination(ExecutorService pool) {pool.shutdown(); // Disable new tasks from being submittedtry {// Wait a while for existing tasks to terminateif (!pool.awaitTermination(60,…

java udp 同一个端口实现收发_Java网络编程之UDP协议

伙伴们注意了&#xff01;小编在这里给大家送上关注福利&#xff1a;搜索微信公众号“速学Java”关注即可领取小编精心准备的资料一份&#xff01;今天我们来聊聊网络编程这部分的内容网络编程1)计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0…

iterate mysql_ITERATE

OutOfOrderScannerNextException: was there a rpc tiaused by: java.util.concurrent.ExecutionException: org.apache.phoenix.exception.PhoenixIOException: Failed after retry of OutOfOrderScannerNextExcept...文章余二五2017-11-222749浏览量Hibernate-ORM:05.Hiberna…

java 多态_Java面向对象 —— 多态

前两天已经相继介绍了Java面向对象的三大特性之中的封装、继承&#xff0c;所以今天就介绍Java面向对象的三大特性的最后一项&#xff0c;多态~首先讲一下什么是多态&#xff0c;以及多态需要注意的细节 什么是多态&#xff1a;一个对象具备多种形态&#xff0c;也可以理解为事…

2023年State-of-AI-Report阅读

文章目录 1、在研究进展方面2、在行业局势方面3、在现有政策方面4、在安全问题方面研究进展行业局势现有政策安全问题 State of AI Report系列至今已经是第六个年头了 也成为了人工智能领域的风向标 这个报告是由业界领先的AI从业者撰写 除了总结过去 也会对未来发展进行很…

java a星寻路算法_用简单直白的方式讲解A星寻路算法原理

很多游戏特别是rts&#xff0c;rpg类游戏&#xff0c;都需要用到寻路。寻路算法有深度优先搜索(DFS)&#xff0c;广度优先搜索(BFS)&#xff0c;A星算法等&#xff0c;而A星算法是一种具备启发性策略的算法&#xff0c;效率是几种算法中最高的&#xff0c;因此也成为游戏中最常…

vb6 方法‘ ’作用于对象 失败_JS基础入门-对象的使用

今日背诵小纸条对象是一组属性方法的组合&#xff0c;其中可包含基本值、对象和函数对象的定义1 对象字面量var hero{name: ‘产品小姐姐’&#xff0c;age: 16&#xff0c;weapon: [ ‘头盔’, ‘靴子’, ‘盔甲 ]&#xff0c;sayHi: function ( ) {console.log( this.name ’…

java接口中方法声明_java – 使用实现中声明的接口中未定义的方法

我有一个由接口定义的类public interface Test {void testMethod();}Test test new TestImpl();public class TestImpl implements Test {Overridepublic void testMethod() {//Nothing to do here}public void anotherMethod() {//I am adding this method in the implementa…

无法从套接字读取更多的数据 oracle_小伙面试时被追问数据库优化,面试前如何埋点反杀?

前言周五的早高峰, 各地软件园地铁站里中出现了不少穿着长袖加绒格子衫, 背双肩电脑包的年轻码农, 现在节气正值 [ 小雪 ] , 11月的全国性突然降温 , 让经历过996摧残的猿们一出地铁站就冻的打了个激灵 , 很庆幸的告诉大家距离放年假还剩不到 37 个工作日, 要买火车票的赶紧预约…

java随机数生成三位数_Java随机数总结

先放一道面试真题以下关于随机数的描述&#xff0c;正确的是&#xff1a;A. Matn.random() 可以生成 [ 0 , 1 ] 内的任意小数B. Random.next( 10 ) 可以生成 [ 0 , 10 ] 内的任意整数C. new java.util.Random().nextInt( 11 ) 可以生成 [ 0 , 10 ] 内的任意整数D. new java.uti…

python锁机制_python基础(锁机制,守护线程,线程队列,线程池)

一、 互斥锁(Lock)与递归锁(RLock)机制1.1 由互斥锁(Lock)产生的死锁现象&#xff1a;#互斥锁(死锁现象)&#xff1a;#死锁现象&#xff1a;from threading importLocklockLock()lock.acquire()print(123)lock.acquire()#等待获取锁(死锁状态)print(456)lock.release()#等待释放…