1、父子进程之间的关系
假设是a进程创建了b进程,那么a进程就是b进程的父进程。反之,假设是b创建了a,那么b进程就是a的父进程。
关于资源:子进程得到的是除了代码段是与父进程共享的意外,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本,既然为副本,也就是说,二者并不共享地址空间。两个是单独的进程,继承了以后二者就没有什么关联了,子进程单独运行。(采用写时复制技术)
关于文件描述符:继承父进程的文件描述符时,相当于调用了dup函数,父子进程共享文件表项,即共同操作同一个文件,一个进程修改了文件,另一个进程也知道此文件被修改了。
2、线程与进程之间的关系
一个进程的线程之间共享由进程获得的资源,但线程拥有属于自己的一小部分资源,就是栈空间,保存其运行状态和局部自动变量的。堆是堆,栈是栈。栈可以叫做:堆栈,栈,栈和堆栈指的都是stack,只是叫法不一样。而堆就只能叫做堆。在线程中new出来的空间占的是进程的资源,也就是说是占用的堆资源(heap)。

Demo

from threading import Thread
from multiprocessing import Process
import os,time

def zxc(num):
    print('啦啦啦,我是线程%d,我爸是进程%s'%(num,os.getpid()))
    time.sleep(1)

def zjc(fid,num):
    print('%d我是子进程%d,我爸是主进程%d'%(num,os.getpid(),fid))
    for i in range(2):
        t = Thread(target=zxc,args=(i,))
        t.start()
if __name__ == "__main__":
    print('进程%d' % os.getpid())
    for i in range(5):
        p = Process(target=zjc,args=(os.getpid(),i))
        p.start()
        p.join()

运行结果

进程35020
0我是子进程14384,我爸是主进程35020
啦啦啦,我是线程0,我爸是进程14384
啦啦啦,我是线程1,我爸是进程14384
1我是子进程35404,我爸是主进程35020
啦啦啦,我是线程0,我爸是进程35404
啦啦啦,我是线程1,我爸是进程35404
2我是子进程23772,我爸是主进程35020
啦啦啦,我是线程0,我爸是进程23772
啦啦啦,我是线程1,我爸是进程23772
3我是子进程34384,我爸是主进程35020
啦啦啦,我是线程0,我爸是进程34384
啦啦啦,我是线程1,我爸是进程34384
4我是子进程38128,我爸是主进程35020
啦啦啦,我是线程0,我爸是进程38128
啦啦啦,我是线程1,我爸是进程38128