标签:查看 sync param command 第一个 time 模块 mon 否则
僵尸进程与进程
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是从头开始执行子进程
在main.py中
```py
import time
import multiprocessing
from multiprocessing import Process
def foo():
time.sleep(3)
print(‘this is foo function‘)
p = Process(target=foo)
p.start()
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()标签:查看 sync param command 第一个 time 模块 mon 否则
原文地址:https://www.cnblogs.com/megachen/p/10360030.html