오래 못 할 짓 하지 않기

[ 운영체제 ] 6. 프로세스 / 스레드 확인 (with Python) 본문

3학년 1학기/운영체제 (OS)

[ 운영체제 ] 6. 프로세스 / 스레드 확인 (with Python)

쫑알bot 2024. 1. 8. 13:21
728x90

파이썬에서 프로세스 확인하기

 

 

Import os

한 뒤에 

 

import os

print("hello world")
print("my pid is", os.getpid())

이렇게 만들어 보았다.

os 라이브러리에 있는 getpid() 메소드를 이용하면

 

내가 사용하고 있는 프로세스의 id를 알 수 있다.

매번 실행 때마다 os가 pid를 주는 것이 다르므로 pid값도 다르게 나온다

 

정확히는 실행이 끝나면 pid를 수거해가기 때문에

다음 실행에 새로운 pid를 받는다고 생각하면 된다.

 


다음 예시는

[ parent 프로세스  > parent가 만든 child 프로세스 > 그 child 프로세스에서 찾는 parent프로세스 ]

 

이렇게 찾는 걸 해볼거다 코드는 다음과 같다.

from multiprocessing import Process

import os

def foo():
  print('foo:child process :' , os.getpid())
  print('foo:parent process :' , os.getppid())

if __name__ =='__main__':
  print('parent process id:', os.getpid())
  child = Process(target=foo).start()

 

if 부분은 무시해도 됨 그냥 아래를 메인함수처럼 실행한다 라는 뜻으로 이해해도 여기에선 무관함

 

출력 결과는 다음과 같다

 

 

 

 

그럼 자식 프로세스를 더 늘리면 어떻게 나올까?

이런 양상이라고 이해하면 편할 듯하다

 



파이썬에서 스레드 확인하기

 

import threading

 

 

 

import threading
import os

print()

def foo():
  print('foo:thread id :' , threading.get_native_id())
  print('foo:my pid is:',os.getpid())

if __name__ =='__main__':
  print('my pid is:',os.getpid())
  thread1 = threading.Thread(target=foo).start()

이 코드를 실행한다.

 

하나의 프로세스가 실행되고, 그 안에 있는 스레드가 foo 함수를 실행한다. 

그럼 foo 함수에서 Process id와 Tread id를 출력한다.

 

이걸 또 thread 2,3을 만들어서 실행해본다면

 

이렇게 될 수도 있음

 

스레드1 -> 함수 2줄 ,2->함수 2줄 ... 항상 순차적으로 진행되는 게 아님

 

 

 

(참고)

한빛미디어