ps로 프로세스가 어떤 쓰레드들을 물고 있는지 이 에 작성했던 적이 있었습니다. 이것을 pstree로 보는 방법을 알아보겠습니다.

 


 테스트용 프로그램은 위와 같습니다. 간단하게 Thread 3개를 생성하고 돌립니다. 쓰레드는 계속 루프를 돌 겁니다.

 

 python3 1.py를 입력하면, 프로세스 하나에 Thread 4개가 돌고 있을 겁니다. 메인 쓰레드 하나랑, for loop에서 생성된 쓰레드 3개.

 

 ps -aL을 입력해 봅시다. 그러면, PID랑 LWP가 나옵니다. 여기서, LWP는 Light Weight Process의 줄임말입니다. 경량 프로세스, 즉 쓰레드라는 것입니다.

 

 쭉 내려보시면, python3이라는 것이 보입니다. PID가 57273이고, LWP가 57273, 57274, 57275, 57276이 있음을 알 수 있어요. 프로세스는 하나인데, 그 안에서 돌고 있는 쓰레드가 4개라는 의미입니다. ps -aux | grep python3을 하면 python3만 필터링 해서 보여줍니다. 그렇다면, python3을 돌리고 있는 프로세스에 대한 정보를 더 쉽게 찾을 수 있을 겁니다.

 

 이렇게 찾은 정보가 pid가 57273이였습니다.

 

 pstree -p pid는 pid의 자식 프로세스들까지 모두 보여줍니다. pstree -p 57273을 입력하니까, 57273에서 생성된 3개의 {python3}이 보입니다. 57274, 57275, 57276입니다. 이 {}는 무엇을 의미할까요?

 

 이 {}는 child threads를 의미합니다. (57273) 밑에 있는 것이 {python3} (57274), {python3} (57275), {python3} (57276)이였습니다. 이 말인 즉슨, 57274, 57275, 57276번 쓰레드가 pid가 57273인 프로세스에서 생성되었다는 것을 의미합니다. 정리하면, 프로세스의 pid를 보다 쉽게 찾아내기 위해, ps -aux과 grep을 적절히 잘 이용해서 찾아냅니다. 다음에, pstree -p pid 옵션을 이용해서, 자식 프로세스와 쓰레드 정보들을 모두 불러옵니다. 이 때, {}가 있는 것들은 쓰레드입니다.

 


 Process로 자식 프로세스를 생성할 수 있습니다. 마찬가지로 3개의 자식 프로세스를 생성해 보겠습니다.

 

 ps -a | grep -E "python3" 명령어를 치시면, python3과 관련된 프로세스들의 정보들을 얻어올 수 있습니다. pstree -p 82146을 입력해 보겠습니다.

 

 82146 밑에 82147, 82148, 82149가 있음을 볼 수 있습니다. 그런데, 아까와는 다르게 {}이 쳐져 있지 않습니다.  이는 제가 자식 쓰레드가 아니라 프로세스를 생성했기 때문입니다.