ARM Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

201239
1625
172598


[리눅스커널] 프로세스: 프로세스 종료 흐름 파악 4. 프로세스(Process) 관리

프로세스는 크게 두 가지 흐름으로 종료됩니다.

유저 애플리케이션에서 exit() 함수를 호출할 때
종료 시그널을 전달받을 때

먼저 프로세스가 종료되는 흐름을 알아보겠습니다.

커널에서 제공하는 do_exit() 함수를 실행하면 프로세스를 종료할 수 있습니다. do_exit() 함수에서 커널이 프로세스를 종료하는 코드를 분석하기에 앞서 do_exit() 함수가 어떤 흐름으로 호출되는지 살펴봅시다. 다음 그림은 프로세스가 종료되는 두 가지 흐름입니다.

 
그림 4.11 유저 프로세스가 종료될 때의 실행 흐름

exit() 시스템 콜 실행

그림 4.11의 왼쪽은 유저 공간에서 exit 시스템 콜을 발생시켰을 때 프로세스가 종료되는 흐름입니다. 보통 유저 프로세스가 정해진 시나리오에 따라 종료해야 할 때 exit() 함수를 호출합니다. 시스템 콜을 발생시킨 후 해당 시스템 콜 핸들러인 sys_group_exit() 함수를 호출합니다. 이후 do_exit() 함수를 호출합니다.

종료 시그널을 전달받았을 때

그림 4.11의 오른쪽은 POSIX kill 시그널을 받아 프로세스가 소멸하는 흐름입니다. 유저 프로세스뿐만 아니라 커널 프로세스도 커널 내부에서 종료 시그널을 받으면 소멸됩니다. 참고로 커널 함수로 send_signal() 함수를 호출하면 특정 프로세스 종료 시그널을 전달할 수 있습니다. 종료 시그널을 받은 프로세스는 do_exit() 함수를 실행해 종료됩니다.

do_exit() 함수로 커널이 프로세스를 종료시키는 세부 동작 못지 않게 프로세스가 종료되는 흐름을 파악하는 것이 중요합니다. 그 이유는 무엇일까요? 유저 애플리케이션 프로세스나 커널 프로세스가 예외 상황에서 의도하지 않게 종료해서 문제가 발생하는 경우가 있기 때문입니다. 

프로세스가 종료될 때 처리되는 흐름을 알면 이런 문제를 만났을 때 커널의 어느 함수부터 분석해야 할지 결정할 수 있습니다.

* 유튜브 강의 동영상도 있으니 같이 들으시면 좋습니다. 




#프로세스

프로세스 소개 
프로세스 확인하기  
프로세스는 어떻게 생성할까?  
유저 레벨 프로세스 실행 실습  
커널 스레드  
커널 내부 프로세스의 생성 과정   
프로세스의 종료 과정 분석  
태스크 디스크립터(task_struct 구조체)  
스레드 정보: thread_info 구조체  
프로세스의 태스크 디스크립터에 접근하는 매크로 함수  
프로세스 디버깅  
   * glibc의 fork() 함수를 gdb로 디버깅하기  


"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)


# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2


 





핑백

덧글

댓글 입력 영역