导航:首页 > 编程语言 > python获取父进程id

python获取父进程id

发布时间:2023-01-20 21:45:10

python同时打开几个程序默认运行哪一个

操作系统的作用
隐藏丑陋复杂的硬件接口,提供良好的抽象接口
管理、调度进程,并且将多个进程对硬件的竞争变得有序
2. 多道技术产生背景

针对单核,实现并发
现在的主机一般是多核,那么每个核都会利用多道技术
有 4 个 cpu,运行于 cpu1 的某个程序遇到 io 阻塞,会等到 io 结束再重新调度
会被调度到 4 个 cpu 中的任意一个,具体由操作系统调度算法决定
3. 多道技术空间上的复用:如内存中同时有多道程序

4. 多道技术时间上的复用

复用一个 cpu 的时间片
注意,遇到 io 切,占用 cpu 时间过长也切
核心在于切之前将进程的状态保存下来
这样才能保证下次切换回来时,能基于上次切走的位置继续运行
进程的概念
进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动
进程是操作系统动态执行的基本单元
在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元
进程与程序的区别
程序是指令和数据的有序集合,是一个静态的概念。程序可以作为一种软件资料长期存在,是永久的
进程是程序在处理机上的一次执行过程,它是一个动态的概念。进程是有一定生命期的,是暂时的
5. 注意:同一个程序执行两次,就会在操作系统中出现两个进程。所以可以同时运行一个软件,分别做不同的事情也不会混乱,比如可以打开两个Pycharm做不同的事

6. 进程调度

要想多个进程交替运行,操作系统必须对这些进程进行调度
这个调度也不是随即进行的,而是需要遵循一定的法则
由此就有了进程的调度算法:先来先服务调度算法、短作业优先调度算法、时间片轮转法、多级反馈队列
并行和并发
并行是指在一个时间点上,有多个进程在被 cpu 计算,比如赛跑,两个人都在不停的往前跑
并发是指资源有限的情况下,在一个时间段上,有多个进程在被 cpu 计算,交替轮流使用资源
并行与并发的区别
并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在执行,这就要求必须有多个处理器
并发是从宏观上,在一个时间段上可以看出是同时执行的,比如一个服务器同时处理多个 session
进程的三状态
在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态
就绪
运行
阻塞
2. 举例说明什么是 argv,什么是阻塞

import sys
print(sys.argv)

# 运行结果:
['G:/course_select/进程的概念.py']

# argv 指参数
# sys.argv 是 Python 解释器在运行的时候传递进来的参数

# 首先在cmd输入以下信息:
python G:/course_select/进程的概念.py
# 打印结果:
['G:/course_select/进程的概念.py']

# 然后在cmd中切换路径到G盘,接着输入 python course_select/进程的概念.py
# 打印结果:
['course_select/进程的概念.py']

# 接着,再在cmd中输入:python course_select/进程的概念.py 123 abc
# 打印结果:
['course_select/进程的概念.py', '123', 'abc']

# 因此,以下程序不能在编辑器里运行,只能在 cmd 里面使用 Python 运行本文件
# 然后要在后面加上 aaa bbb
# 就像上面的 python course_select/进程的概念.py 123 abc 一样
if sys.argv[1] == "aaa" and sys.argv[2] == "bbb":
print("登录成功")
else:
print("登录失败")
exit()
print(666)

# 而如果使用input(),其实就是一种阻塞
3. 进程的三状态图

.png
同步异步
同步:形象的说,一件事的执行必须依赖另一件事的结束,强调的是顺序性
异步: 形象的说,两件事情可以同时进行
注意:同步异步和并行、并发没关系
阻塞:等待,比如 input sleep recv accept recvfrom
非阻塞:不等待,start/terminate 都是非阻塞的
阻塞与非阻塞主要是从程序(线程)等待消息通知时的状态角度来说的
可以分为四类:
同步阻塞
异步阻塞
同步非阻塞
异步非阻塞
start/terminate 都是非阻塞的
进程模块
跟进程相关的基本都在这个模块里:multiprocessing
父进程与子进程的对比分析
父进程,比如运行本文件
子进程,运行 Process(target=func).start()
父进程与子进程数据隔离
主进程等待子进程结束之后再结束
子进程和主进程之间默认是异步的
from multiprocessing import Process
import time

def func():
time.sleep(1)
print(666)

if __name__ == "__main__":
# 开启了一个新的进程,在这个新的进程里执行的 func()
Process(target=func).start()
time.sleep(1)
# 主进程
print(777)

# 777
# 666
# 运行结果仔细观察发现有异步的效果
# 也就是说,主进程和新的进程同时执行
3. 上面的示例中为什么要有 if __name__ == "__main__"?其实这是 windows 操作系统开启子进程的方式问题

4. 继续深入

import time
import os
from multiprocessing import Process

def func():
time.sleep(1)
print(666, os.getpid(), os.getppid())

if __name__ == "__main__":
# 代码执行到这里并不代表开启了子进程
p = Process(target=func)
# 开启了一个子进程,并执行func()
p.start()
time.sleep(1)
print(777, os.getpid(), os.getppid())

# 主进程运行的结果
777 12340 1636
# 子进程运行的结果
666 7604 12340

# 由上面两行结果可以得出:
# 利用 os.getpid() 证明两个进程不一样
# 另外每次运行,os.getpid() 结果都不一样
# 但是,12340 是主进程的 id,7604 是子进程的 id
# 1636 是 Pycharm 的 id,排列特点不变
5. 开启多个相同的子进程示例

import time
import os
from multiprocessing import Process

def func():
time.sleep(3)
print(666, os.getpid(), os.getppid())

if __name__ == "__main__":
for i in range(10):
p = Process(target=func)
p.start()
time.sleep(1)
print(777, os.getpid(), os.getppid())

# 这里需要注意一点:Python 程序一直都是逐行执行
# 但是因为这里设置了时间延迟,因此会先执行主程序的代码
# 运行结果:
777 29006 3833 # 暂停 2s 后再有下面的结果
666 29007 29006
666 29009 29006
666 29008 29006
666 29010 29006
666 29013 29006
666 29011 29006
666 29012 29006
666 29014 29006
666 29016 29006
666 29015 29006

# 观察结果发现主进程只运行了一次
# 然后剩下的全是一个子进程重新运行的结果
# 主进程运行完不会结束,它会等子进程全部运行结束
# 注意变量 p 拿到的是最后一个子进程的 id
6. 开启多个不同的子进程示例

import time
import os
from multiprocessing import Process

def func():
time.sleep(2)
print(666, os.getpid(), os.getppid())

def func2():
print(111)

if __name__ == "__main__":
for i in range(3):
p = Process(target=func)
p.start()
for i in range(2):
p = Process(target=func2)
p.start()
time.sleep(1)
print(777, os.getpid(), os.getppid())

# 运行程序时仔细观察结果显示顺序:
111
111
777 29316 3833
666 29319 29316
666 29317 29316
666 29318 29316
7. 给子进程传参示例

from multiprocessing import Process

def func(name):
print(666, name)

if __name__ == "__main__":
p = Process(target=func,args=(777,)) # 注意是一个元组
p.start()

import time
from multiprocessing import Process

def func(num, name):
time.sleep(1)
print(num, "hello", name)

if __name__ == "__main__":
for i in range(10):
p = Process(target=func, args=(i, "abc"))
p.start()
print("主进程")

# 运行结果:
666 777
主进程
0 hello abc
2 hello abc
1 hello abc
3 hello abc
5 hello abc
4 hello abc
6 hello abc
7 hello abc
8 hello abc
9 hello abc

# 多运行几次,发现子进程并不是完全按顺序运行的
# 比如上面先出结果 2 hello abc,再出结果 1 hello abc
8. 子进程可以有返回值吗:不能有返回值,因为子进程函数中的返回值无法传递给父进程

import time
from multiprocessing import Process

def func():
time.sleep(3)
print("这是子进程,3s后才运行")

if __name__ == "__main__":
Process(target=func).start()
print("主进程")

# 运行结果:
主进程
这是子进程,3s后才运行

# 主进程会默认等待子进程结束之后才结束
# 因为父进程要负责回收子进程占用的操作系统资源
相关资源:Python多进程写入同一文件的方法_python多进程写入同意文件-其它...
文章知识点与官方知识档案匹配
Python入门技能树首页概览
194693 人正在系统学习中
点击阅读全文
打开CSDN,阅读体验更佳

Python多进程(一)进程及进程池_程序员-夏天的博客
print("主进程结束") 通过上述代码我们发现,multiprocessing.Process帮我们创建一个子进程,并且成功运行,但是我们发现,在子进程还没执行完的时候主进程就已经死了,那么这个子进程在主进程结束后就是一个孤儿进程,那么我们可以让主进程等待...
Python多进程之Process、Pool、Lock、Queue、Event、Semaphore、Pipe_大 ...
1. Python创建进程类Process python的multiprocessing模块提供了一个创建进程的类Precess,其创建有以下两种方法: 创建Process类的实例,并指向目标函数和传递参数 自定义一个类并继承Process类,重写__init__()和run()方法 ...
python两个进程同时开启只运行了一个_二十二、 深入Python的进程和线程(上篇)...
“@Author: Runsen”进程(Process)和线程(Thread)都是操作系统中的基本概念,它们之间有一些优劣和差异,那么在Python中如何使用进程和线程?CPU计算机的核心是CPU,它承担了计算机的所有计算任务,CPU就像一个工厂,时刻在运行着,而操作系统管理着计算机,负责任务的调度、资源的分配和管理。进程进程是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据...
继续访问
python启动多个进程_Python多处理:只有一个进程正在运行
由于注释表明您希望使用初始化程序和initargs参数传递featureVector.在Unix类型的系统上,这将导致大量的性能提升(即使selLabel中只有1个项目),因为该值将使用os.fork基本上免费传递给子进程.否则,每次调用foo时,featureVector都将被父进程pickle,通过管道传递并由子进程进行unpickled.这将花费很长时间,并且基本上将序列化所有子进程,因为它...
继续访问
python多进程多线程,多个程序同时运行_陈逸飞_p的博客_pyth...
python 模块应用 开发工具 pycharm 实现方法 多任务的实现可以用进程和线程来实现 进程—> 线程---> 多任务应用 多进程操作 比如下载多个文件, 利用cpu 资源 提高效率 多任务: 同一时间执行多个任务, 比如windows操作系统 执行...
python多进程单例_Python多线程处理实例详解【单进程/多进程】
python — 多线程处理 1、一个进程执行完后,继续下一个进程 root@72132server:~# cd /root/python/multiprocess/ root@72132server:~/python/multiprocess# ls multprocess.py root@72132server:~/python/multiprocess# cat multprocess...
系统编程__2__父子进程的创建和回收
系统编程 这里写的是对于小白来说更多的了解系统编程的文章,有写的不对的地方还恳请各位大佬指出错误,小编一定会多多采纳[手动多谢]。 那么,上一次我们稍微了解了一下关于系统编程的一些主要内容[没有看到的童鞋还请去上一篇文章稍微复习一下噢]。 这节课,我们先来想一想,我们为什么要学系统编程呢?原因很简单,我们要充分的利用CPU的性能,CPU和我们人类不太一样,我们人类大多数情况下,在同一时间,只能完成一件事,而CPU作为无数科学家的心血当然不会这么简单,CPU能够同时进行多个进程,这里的进程我们可以理解成任务,
继续访问
android 10 system/core无法打印log问题
1.关闭重定向 system/core/init/util.cpp --- a/init/util.cpp +++ b/init/util.cpp @@ -454,7 +454,7 @@ static void InitAborter(const char* abort_message) { // SetStdioToDevNull() must be called again in second stage init. void SetStdioToDevNull(char** argv) { ...
继续访问
Python多进程1 一个多进程实例_BBJG_001的博客
下执行,job('主进程step1###')p1=mp.Process(target=job,args=('新进程>>>',))# 创建一个进程# 注意当只有一个参数的时候,一定要在参数后面加一个逗号,因为args需要是一个可以迭代的参量p1.start()# 开始执行新进程# p...
热门推荐 python多进程多线程,多个程序同时运行
python 多线程 多进程同时运行 多任务要求 python 基础语法 python 文件目录操作 python 模块应用 开发工具 pycharm 实现方法 多任务的实现可以用进程和线程来实现 进程—> 线程----> 多任务应用 多进程操作 比如下载多个文件, 利用cpu 资源 提高效率 多任务: 同一时间执行多个任务, 比如windows操作系统 执行方式有两种( 表现形式 ) 并发 在单核cpu中: 在一段时间内交替执行多个任务, 例如单核cpu 处理多任务, 操作系统让各个任务交
继续访问
fork()函数
多进程通信 fork()函数
继续访问
(1/7)Electron教程(一)什么是 Electron,由来、适用场景 和 Electron 的环境搭建(1/7)
最近自己有个小的需求,是做一个能编辑本地特定文本的工具,需要跨平台, Windows 和 macOS,这样,如果用原生开发的话,Windows 就要用c#macOS 就要用swift,学习成本高,并且学完用处也不是很大。我本身是前端开发的,发现了这个electron能满足我的需求,跨平台运行,内部是 js 驱动的,简直就是如鱼得水。顺便把学习的经历写出来,分享需要的人,我会按标题序号渐进式地编写内容。electron。...
继续访问

fork()详解
<一>: fork()函数用来创建新的进程,它的特点是调用一次返回两次( 在原来的进程中返回新进程的 PID(新进程的 PID 肯定不等于 0), 在新进程中返回为 0.) 函数原型:pid_t fork(void); pid_t getpid(); 获取当前进程的 pid 值。 pid_t getppid(); 获取当前进程的父进程 pid 值。 图一 如图一所...
继续访问
fork()函数详解
目录 1.基本了解: 2.fork函数的了解: 3.僵死进程: 1.基本了解: 一个进程,包括代码、数据和分配给进程的资源。fork 函数会新生成一个进程,调用 fork 函数的进程为父进程,新生成的进程为子进程。在父进程中返回子进程的 pid,在子进程中返回 0,失败返回-1。 为什么两个进程的fpid不同呢,这与fork函数的特性有关。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程...
继续访问

Electron在Windows下的环境搭建
Electron作为一种用javascript写桌面程序的开发方式,现在已经被大众接受。下面就介绍如何在windows(>win7)下快速搭建Electron开发环境。 1. nodejs 的安装 从nodejs 下载最新版本的windows安装程序进行安装,我下载的是v6.9.1,安装时一路默认即可,这个安装会把nodejs和npm配置到系统PATH中,这样在命令行的任何位置都可以直接...
继续访问
python多线程pool_Python mutiprocessing多线程池pool操作示例
本文实例讲述了Python mutiprocessing多线程池pool操作。分享给大家供大家参考,具体如下:python — mutiprocessing 多线程 pool脚本代码:root@72132server:~/python/multiprocess# lsmultiprocess_pool.py multprocess.pyroot@72132server:~/python/multi...
继续访问
最新发布 python入门开发学习笔记之守护进程
本节重点 了解守护进程的概念 本节时长需控制在5分钟内 一 守护进程 主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程就好比崇祯皇帝身边的老太监,崇祯皇帝已死老太监就跟着殉葬了。 关于守护进程需要强调两点: 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children 如果我们有两个任务需要并发执行,那么开一个主进程和一个子进程分
继续访问
用python进行多进程编程时,只有主进程可以运行,子进程貌似没有运行是什么原因?
找了半天,原来是这个原因!这是因为multiprocessing模块在交互模式是不支持的,在 cmd 里头输入 python xxx.py 来运行起来,你就可以看到子进程的执行了。
继续访问
linux中fork() 函数详解
fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了...
继续访问
Windows版 Node.js 安装详解以及Electron安装
Windows Node.js 安装详解以及Electron安装详解,示例版本:node v10.15.0/npm6.4.1 介绍: 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执...
继续访问

Electron 简介
本教程我们来学习 Electron 的基础知识,下面我们先来学习一下什么是 Electron。 Electron是什么 Electron 是是 GitHub 开发的一个开源框架。它允许使用 Node.js(作为后端)和 Chromium(作为前端)完成桌面 GUI 应用程序的开发。 Electron 可以用于构建具有 HTML、CSS、JavaScript 的跨平台桌面应用程序,它通过将 Chromium 和 node.js 合同一个运行的环境中来实现这一点,应用程序可以打包到 Mac、Windows 和
继续访问

Election的优缺点
优点 原生的接口(菜单、消息提醒、系统托盘等)。 上手难度低。能够使用react、vue等前端框架,能方便地迁移前端组件,构建出漂亮的桌面应用。 方便热更新 调试和测试方便 Electron使用node.js。因此,您可以导入Chrome应用程序中不容易使用的许多模块 Electron文档要好得多,尽管它是一个更年轻的平台 缺点 不适合开发轻量级的应用。即使一个electron的项目框架,也包含chromium内核,打包完接近200G。 相比c++开发的桌面应用,性能远远不如后者。 启动速
继续访问
[electron]终极奥义 五千字教程丢给你
前言 本文包含打包、自动更新、简易API、调试、进程通信等相关知识点,内容较多,可能会引起不适,请酌情查看(手动滑稽)。 electron 简介 electron是由Github开发,是一个用Html、css、JavaScript来构建桌面应用程序的开源库,可以打包为Mac、Windows、Linux系统下的应用。 electron是一个运行时环境,包含Node和Chromium,可以理解成把we...
继续访问
深入理解Java中的wait() 方法
使用场景 当某个线程获取到锁后,发现当前还不满足执行的条件,就可以调用对象锁的wait方法,进入等待状态。 直到某个时刻,外在条件满足了,就可以由其他线程通过调用notify()或者notifyAll()方法,来唤醒此线程。 这篇文章将侧重于讨论wait()方法对于线程状态的影响,以及被唤醒后线程的状态变更。 条件 只有已经获取锁的线程,才可以调用锁的wait方法,否则会抛出异常IllegalMonitorStateException。 比如下面的代码,A获得了锁后,主动调用wait方法释放锁和
继续访问

用Electron开发桌面应用的避坑指南(文末送书)
送一波高质量Web开发图书,送5本书籍,随你挑。抽奖规则见本文最后!抽奖规则见本文最后!抽奖规则见本文最后!如今,Electron 领域发生了重大的变革,Electron 版本更新换代极快...
继续访问

python多进程只有一个进程在执行
python两个进程同时开启只运行了一个。

⑵ python怎么获得进程的pid

#-*-encoding:UTF-8-*-
importos
importsys
importstring
importpsutil
importre

defget_pid(name):
process_list=psutil.get_process_list()
regex="pid=(d+),sname='"+name+"'"
printregex
pid=0
forlineinprocess_list:
process_info=str(line)
ini_regex=re.compile(regex)
result=ini_regex.search(process_info)
ifresult!=None:
pid=string.atoi(result.group(1))
printresult.group()
break
defmain(argv):<br>name=argv[1]<br>get_pid(name)

if__name__=="__main__":
main(sys.argv)

⑶ python 中os.system和commands.getoutput的区别

1. 使用os.system("cmd")

这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要import os。

[python]

os.system("ls")

2. 使用Popen模块产生新的process

现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执
行的信息。的确,Popen非常强大,支持多种参数和模式。使用前需要from subprocess import Popen,
PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用
wait()方法,但是也不能获得执行的返回值了。

Popen原型是:

[python]

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

参数bufsize:指定缓冲。我到现在还不清楚这个参数的具体含义,望各个大牛指点。

参数executable用于指定可执行程序。一般情况下我们通过args参数来设置所要运行的程序。如果将参数shell设为 True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。

参数stdin, stdout, stderr分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。

参数preexec_fn只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。

参数Close_sfs:在windows平台
下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管
道。我们不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。

如果参数shell设为true,程序将通过shell来执行。

参数cwd用于设置子进程的当前目录。

参数env是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。

参数Universal_newlines:不同操作系统下,文本的换行符是不一样的。如:windows下用’/r/n’表示换,而Linux下用 ‘/n’。如果将此参数设置为True,Python统一把这些换行符当作’/n’来处理。

参数startupinfo与createionflags只在windows下用效,它们将被传递给底层的CreateProcess()函数,用 于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等。

subprocess.PIPE
在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数,表示与子进程通信的标准流。

subprocess.STDOUT
创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出。

Popen的方法:

Popen.poll()
用于检查子进程是否已经结束。设置并返回returncode属性。

Popen.wait()
等待子进程结束。设置并返回returncode属性。

Popen.communicate(input=None)
与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。
Communicate()返回一个元组:(stdoutdata,
stderrdata)。注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。同样,如
果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。

Popen.send_signal(signal)
向子进程发送信号。

Popen.terminate()
停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。

Popen.kill()
杀死子进程。

Popen.stdin
如果在创建Popen对象是,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。

Popen.stdout
如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

Popen.stderr
如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

Popen.pid
获取子进程的进程ID。

Popen.returncode
获取进程的返回值。如果进程还没有结束,返回None。

例如:

[python]

p = Popen("cp -rf a/* b/", shell=True, stdout=PIPE, stderr=PIPE)
p.wait()
if p.returncode != 0:
print "Error."
return -1

3. 使用commands.getstatusoutput方法
这个方法也不会打印出cmd在linux上执行的信息。这个方法唯一的优点是,它不是一个阻塞的方法。即没有Popen函数阻塞的问题。使用前需要import commands。

例如:

[python]

status, output = commands.getstatusoutput("ls")

还有只获得output和status的方法:

[python]

commands.getoutput("ls")
commands.getstatus("ls")

⑷ python脚本怎么获取远程linux服务器的进程名

进程信息
/proc目录包含了所有正运行的进程目录。这些目录的名字和进程的标识符是一样的。所以,如果你遍历/proc目录下那些使用数字作为它们的名字的目录,你就会获得所有现在正在运行的进程列表。在下面的代码中process_list()函数返回所有现在正在运行的进程的标识符列表。当你执行这个程序后,这个列表的长度就是在系统上运行的总进程数。

复制代码 代码如下:

#!/usr/bin/env python
"""
List of all process IDs currently active
"""
from __future__ import print_function
import os
def process_list():
pids = []
for subdir in os.listdir('/proc'):
if subdir.isdigit():
pids.append(subdir)
return pids

if __name__=='__main__':
pids = process_list()
print('Total number of running processes:: {0}'.format(len(pids)))

上面的程序当执行后会显示和下面类似的输出:

复制代码 代码如下:
Total number of running processes:: 229

每个进程目录包含了一些其他文件和目录,如进程命令的调用,它正使用的共享库以及其它的。
建议看看《Linux就该这么学》这本书

⑸ python使用标准库根据进程名如何获取进程的

在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。
使用subprocess包中的函数创建子进程的时候,要注意:
1) 在创建子进程之后,父进程是否暂停,并等待子进程运行。
2) 函数返回什么
3) 当returncode不为0时,父进程如何处理。

⑹ python中怎么判断子进程和父进程

python执行ps -ef | grep XXX XXX为你的进程,当有返回值的时候,说明你的进程存在,python检查系统进程其实调用的也是linux的shell

⑺ python 获取进程的pid

方法一:
使用subprocess 的check_output函数执行pidof命令

方法二:

使用pgrep命令,pgrep获取的结果与pidof获得的结果稍有不同.pgrep的进程id稍多几个.pgrep命令可以使适用subprocess的check_out函数执行

方法三:
获取当前脚本的pid进程

方法四:命令获取+kill PID

说明:

注意:linux的进程号最大是是 32768 (32 位系统)和 2 的 22 次方(400w 左右)(64 位系统)。cut -c 9-15不够,改成awk '{print $2}'

⑻ python 多进程

基于官方文档:
https://docs.python.org/zh-cn/3/library/multiprocessing.html
日乐购,刚才看到的一个博客,写的都不太对,还是基于官方的比较稳妥
我就是喜欢抄官方的,哈哈

通常我们使用Process实例化一个进程,并调用 他的 start() 方法启动它。
这种方法和 Thread 是一样的。

上图中,我写了 p.join() 所以主进程是 等待 子进程执行完后,才执行 print("运行结束")
否则就是反过来了(这个不一定,看你的语句了,顺序其实是随机的)例如:

主进加个 sleep

所以不加join() ,其实子进程和主进程是各干各的,谁也不等谁。都执行完后,文件运行就结束了

上面我们用了 os.getpid() 和 os.getppid() 获取 当前进程,和父进程的id
下面就讲一下,这两个函数的用法:
os.getpid()
返回当前进程的id
os.getppid()
返回父进程的id。 父进程退出后,unix 返回初始化进程(1)中的一个
windows返回相同的id (可能被其他进程使用了)
这也就解释了,为啥我上面 的程序运行多次, 第一次打印的parentid 都是 14212 了。
而子进程的父级 process id 是调用他的那个进程的 id : 1940

视频笔记:
多进程:使用大致方法:

参考: 进程通信(pipe和queue)

pool.map (函数可以有return 也可以共享内存或queue) 结果直接是个列表

poll.apply_async() (同map,只不过是一个进程,返回结果用 xx.get() 获得)

报错:

参考 : https://blog.csdn.net/xiemanR/article/details/71700531

把 pool = Pool() 放到 if name == " main ": 下面初始化搞定。
结果:

这个肯定有解释的

测试多进程计算效果:
进程池运行:

结果:

普通计算:

我们同样传入 1 2 10 三个参数测试:

其实对比下来开始快了一半的;
我们把循环里的数字去掉一个 0;
单进程:

多进程:

两次测试 单进程/进程池 分别为 0.669 和 0.772 几乎成正比的。
问题 二:
视图:
post 视图里面

Music 类:

直接报错:

写在 类里面也 在函数里用 self.pool 调用也不行,也是相同的错误。

最后 把 pool = Pool 直接写在 search 函数里面,奇迹出现了:

前台也能显示搜索的音乐结果了

总结一点,进程这个东西,最好 写在 直接运行的函数里面,而不是 一个函数跳来跳去。因为最后可能 是在子进程的子进程运行的,这是不许的,会报错。
还有一点,多进程运行的函数对象,不能是 lambda 函数。也许lambda 虚拟,在内存??

使用 pool.map 子进程 函数报错,导致整个 pool 挂了:
参考: https://blog.csdn.net/hedongho/article/details/79139606
主要你要,对函数内部捕获错误,而不能让异常抛出就可以了。

关于map 传多个函数参数
我一开始,就是正常思维,多个参数,搞个元祖,让参数一一对应不就行了:

报错:

参考:
https://blog.csdn.net/qq_15969343/article/details/84672527
普通的 process 当让可以穿多个参数,map 却不知道咋传的。
apply_async 和map 一样,不知道咋传的。

最简单的方法:
使用 starmap 而不是 map

结果:
子进程结束
1.8399453163146973
成功拿到结果了

关于map 和 starmap 不同的地方看源码

关于apply_async() ,我没找到多参数的方法,大不了用 一个迭代的 starmap 实现。哈哈

关于 上面源码里面有 itertools.starmap
itertools 用法参考:
https://docs.python.org/zh-cn/3/library/itertools.html#itertool-functions

有个问题,多进程最好不要使用全部的 cpu , 因为这样可能影响其他任务,所以 在进程池 添加 process 参数 指定,cpu 个数:

上面就是预留了 一个cpu 干其他事的

后面直接使用 Queue 遇到这个问题:

解决:
Manager().Queue() 代替 Queue()

因为 queue.get() 是堵塞型的,所以可以提前判断是不是 空的,以免堵塞进程。比如下面这样:
使用 queue.empty() 空为True

阅读全文

与python获取父进程id相关的资料

热点内容
单片机服务器编译 浏览:768
单口usb打印机服务器是什么 浏览:859
战地五开服务器要什么条件 浏览:954
在word中压缩图片大小 浏览:253
javatomcat图片 浏览:417
程序员生产智能创意 浏览:65
汇和银行app怎么登录 浏览:381
腾讯服务器如何上传源码 浏览:745
单片机的原理概述 浏览:508
火控pdf 浏览:267
如何复制云服务器centos环境 浏览:984
债权pdf 浏览:303
红色番字的app怎么下载 浏览:876
云服务器流程教课 浏览:702
中国农业银行app怎么没有网 浏览:997
几率表算法 浏览:902
程序员理工科 浏览:708
企业邮箱登录收件服务器地址 浏览:560
计算机思维与算法设计的重要性 浏览:664
linux刷新磁盘命令 浏览:78