DO_EXIT

포스트: 3
Tags

Posts

3 posts

[라즈베리파이] 프로세스: do_exit() 함수 분석

Guillermo Austin Kim|2019년 1월 18일

do_exit() 함수로 커널이 프로세스를 종료 시키는 세부 동작 못지 않게 프로세스가 종료되는 흐름을 파악하는 것이 중요합니다. 그 이유는 무엇일까요? 유저 어플리케이션 프로세스나 커널 프로세스가 예외 상황에서 의도하지 않게 종료해서 문제가 발생하는 경우가 있습니다. 이런 문제를 만났을 때 커널 어느 함수부터 분석을 해야할 지 결정할 수 있습니다. 이번에는 do_exit() 함수가 어떻게 실행되는지 알아봅시다. - exit() 시스템 콜 실행유저 어플리케이션 프로세스가 자신을 종료하려면 리눅스 저수준 함수로 exit() 함수를 호출합니다. 이 때 시스템 콜을 발생시킨 다음 sys_group_exit() 시스템콜 핸들러를 실행합니다. - 다른 프로세스가 프로세스 종료 시그널을 전달했을 경우프로세스

[라즈베리파이] 프로세스 - 자식 프로세스 생성 실습 및 ftrace 로그 분석(2/2)

Guillermo Austin Kim|2018년 10월 27일

From: 프로세스 - 자식 프로세스 생성 실습 및 ftrace 로그 분석(1/2) 프로세스 생성과 종료 과정 메시지가 포함된 ftrace 전체 로그는 다음과 같습니다. 각 단계 별로 ftrace 로그를 분석하겠습니다.1 raspbian_fork-17120 [003] ....1318.513909: copy_process+0x14/0x17d8 3 => _do_fork+0xb04 => SyS_clone+0x305 => ret_fast_syscall+0x0...6 raspbian_fork-17120 [003] d...1318.51444

[리눅스커널] 동기화 - 유저 프로세스 시스템 콜 호출 시 레이스 컨디션

Guillermo Austin Kim|2018년 10월 3일

유저 공간에서 생성된 프로세스는 여러 개 쓰레드를 생성합니다. 이 쓰레드들이 같은 디바이스 노드에 접근해서 시스템 콜을 발생하며 커널과 통신합니다. fork() 라는 함수를 유저 공간에서 시스템 콜로 호출하면 유저 공간에서 sys_clone()이란 함수 호출로 프로세스를 생성합니다. 유저 공간에서 open(), write() 그리고 ioctl() 이란 함수를 호출하면 이에 대응하는 시스템 콜을 호출해서 커널 공간과 통신합니다. 이번에는 시스템 콜 관련 함수에서 발생한 레이스 컨디션을 확인합니다. 먼저 패치 코드를 소개하겠습니다.1 diff --git a/kernel/exit.c b/kernel/exit.c2 --- a/kernel/exit.c3 +++ b/kernel/exit.c4 @@ -760,10 +