多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 1.进程vs程序 编写完毕的代码,在没有运行的时候,称之为**程序** 正在运行着的代码,就成为**进程** 进程,出了包含代码意外,还有需要运行的环境,所以和程序是有区别的 #### 2.fork() python的os模块封装了常见的系统调用,其中就包括fork,可以再python程序中轻松创建进程: ~~~ import os # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以 pid = os.fork() if pid == 0: print('哈哈1') else: print('哈哈2') ~~~ >[warning] 说明 >程序执行到os.fork()时候,操作系统会创建一个新的进程(子进程),然后复制父进程的所有信息到子进程中 >* * * * * >然后付进程和子进程都会从fork()函数中得到一个返回自,在子进程中这个值一定是0,而父进程中是子进程的id号 在unix/linux操作系统中,提供了以个fork()系统函数,他非常特殊. 普通函数调用.条用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回. 子进程永远返回0,而父进程返回子进程的ID 这样做的理由是,一个父进程可以fork()出很多子进程,所以,父进程要记下每个子进程的id,而子进程只需要调用getppid()就可以拿到父进程的id #### 3.getpid(),getppid() ~~~ import os rpid = os.fork() if rpid<0: print("fork调用失败。") elif rpid == 0: print("我是子进程(%s),我的父进程是(%s)"%(os.getpid(),os.getppid())) x+=1 else: print("我是父进程(%s),我的子进程是(%s)"%(os.getpid(),rpid)) print("父子进程都可以执行这里的代码") ~~~ 运行结果: ~~~ 我是父进程(19360),我的子进程是(19361) 父子进程都可以执行这里的代码 我是子进程(19361),我的父进程是(19360) 父子进程都可以执行这里的代码 ~~~