殭屍進程與進程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()