최초의 프로세스를 제외한 프로세스들은 최초의 프로세스를 복사해서 이뤄진다.
이 첫번째 프로세스가 부모 프로세스, 이를 복사해 만든 프로세스를 자식 프로세스라고 하고
이때 부모프로세스를 복사하는 시스템함수를 fork()라고 함.
새로운 프로세스를 생성하지 않고 기존 프로세스를 복사해서 만드는 것은 시스템의 과부하를
방지 함
exec():코드영역과 데이터영역을 새롭게 덮어 씌어주는 함수
를 이용해 자식프로세스들은 데이터를 변경하여 새롭게 생성된 목적에 맞는 일을 독립적으로
수행한다.
<예제 5번>
from multiprocessing import Process
# multiprocessing : 멀티프로세싱 프로그램을 하고 싶을 때 사용하는 패키지
# Process : 자식 프로세스를 생성할 때 사용하는 객체, 클래스 임.
import os
def func():
print('안녕, 나는 실험용으로 대충 만들어본 함수야!')
print('나의 프로세스 아이디:', os.getpid())
print('나의 부모 프로세스 아이디:', os.getppid())
if __name__ == '__main__' :
print('05.py 프로세스 아이디 :', os.getpid())
child = Process(target=func).start()
# 05.py가 부모프로세스가 되고 하위프로세스에게 func한수를 시킬거야
<실행결과>

<예제 6번>
from multiprocessing import Process
import os
import time
def func():
print('안녕, 나는 실험용으로 대충 만들어본 함수야!')
print('나의 프로세스 아이디:', os.getpid())
print('나의 부모 프로세스 아이디:', os.getppid())
if __name__ == '__main__' :
print('06.py 프로세스 아이디 :', os.getpid())
child1 = Process(target=func)
child1.start()
time.sleep(0.5)
child2 = Process(target=func)
child2.start()
time.sleep(0.5)
child3 = Process(target=func)
child3.start()
time.sleep(0.5)
<실행결과>

<예제 7번>
from multiprocessing import Process
import os
import time
def coke():
print("콜라 프로세스 아이디: ", os.getpid())
print("부모 프로세스 아이디: ", os.getppid())
def cider():
print("사이다 프로세스 아이디: ", os.getpid())
print("부모 프로세스 아이디: ", os.getppid())
def juice():
print("주스 프로세스 아이디: ", os.getpid())
print("부모 프로세스 아이디: ", os.getppid())
if __name__ == '__main__' :
print('07.py 프로세스 아이디 :', os.getpid())
child1 = Process(target=coke)
child1.start()
time.sleep(0.5)
child2 = Process(target=cider)
child2.start()
time.sleep(0.5)
child3 = Process(target=juice)
child3.start()
time.sleep(0.5)
<실행결과>

<과제 실습 코드>
# 내 파이썬 프로그램의 이름을 알아보자.
# psutil로 지금 돌아가고 있는 프로세스를 싹 다 조회한다
# 조회하다가 08.py와 프로세스 아이디가 일치하는 아이디를 발견하면 프로세스 이름을 출력한다.
import psutil
import os
if __name__ == '__main__' :
print('08.py 프로세스 아이디 :', os.getpid())
for proc in psutil.process_iter():
ps_name = proc.name()
if os.getpid() == proc.pid:
print(f'08.py의 프로세스 이름은: {ps_name}', f'아이디는 : {proc.pid}')
<실행결과>
