僵尸进程与进程python
Windows上建立子进程的函数为CreateProcess(), 也是字如其名, 是建立一个进程而不是复制一个进程。CreateProcess()函数的API是编程
BOOL CreateProcessA( LPCSTR lpApplicationName, // 进程要执行的.exe文件名 LPSTR lpCommandLine, // 执行的.exe的命令行参数 LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation );
咱们主要看API的第1和第2个参数, 很明显, CreateProcess()API能够建立一个与当前父进程彻底不一样的子进程, 由于它接受一个.exe文件的路径, 该路径能够是任何一个.exe文件, 将该.exe文件加载到内存中CPU从头开始执行代码, 若是要实现与类Unix中fork()函数相似的功能, CreateProcess()的第一个参数应该为父进程的.exe文件的位置, 这样就建立出来一个与父进程同样的子进程了, 可是刚才说了是相似, 确定有不一样, 类Unix中fork出来的子进程的入口是父进程fork语句的下一条指令, 而CreateProcess是从头开始执行子进程app
在main.py中
```py异步
import time
import multiprocessing
from multiprocessing import Processasync
def foo():
time.sleep(3)
print('this is foo function')函数
p = Process(target=foo)
p.start()ui
python3 main.py
, 报错: 常见了无限个进程__name__ == __main__
而子进程__name__ != __main__
规避import time import multiprocessing from multiprocessing import Process def foo(): time.sleep(3) print('this is foo function') if __name__ == '__main__': p = Process(target=foo) p.start() print('Finish')
lock = Lock() with Manager() as m: d = m.dict({'data': 100}) p = Process(target=foo, args=(d, lock)) p.start()