父进程,子进程的pid问题?

问题:

自建一个Myprocess(Process)类
内部定义封装函数ppid:return (os.getppid())
Myprocess创建对象p1
两个问题:
1、见图1p1.ppid的结果指的是哪个进程?为什么不是4740?
p1.ppid为什么不是4740

2、断点调试的时候,见图2,
_parent_pid 是指什么?
_parent_pid 是指什么

源码:

import time,os
from multiprocessing import Process

class Myprocess(Process):
    def __init__(self,name):
        super(Myprocess,self).__init__()
        self.name = name

    def run(self):
        print('子进程:\033[1;32;40m%s\033[0m 父进程:\033[1;31;40m%s\033[0m' %(os.getpid(),os.getppid()))
        print('系统调用执行子进程,等待3秒')
        time.sleep(3)

    @property
    def ppid(self):
        return (os.getppid())


if __name__ == '__main__':
    p1 = Myprocess('进程对象')
    p1.start()
    print('%s,的pid:\033[1;32;40m%s\033[0m' % (p1.name,p1.pid))
    print('%s,的ppid:\033[1;31;40m%s\033[0m' % (p1.name,p1.ppid))
    print('【主进程】:',os.getpid())
阅读 5k
2 个回答

ppid是pycharm的id,另一个不知

1、_parent_pid 的结果,3400,指的当前主进程的父进程,即pycharm
2、主进程运行过程中,MYprocess中,除了run,其他定义都是在主进程4740中完成,唯独p1.start()申请系统调用成功后,主程序调用了子程序run()后,得到子程序9812。
即,若要在进程对象p1中拿到父进程pid,就不能使用os.getppdid(),而是os.getpid()

    @property
    def ppid(self):
        return os.getpid()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题