2018. 11. 20. 14:31ㆍ임베디드sw공학
1, Process Management (Linux/Unix 에서의)
1) 처음 UNIX를 시작하면, 한 개의 프로세스만 존재한다. "init"이란 프로세스. 이것의 PID는 '1'이다.
2) UNIX에서 새로운 프로세스를 만드는 유일한 방법은 존재하는 프로세스를 복제하는 것이다. - 그래서 모든 프로세스의 조상은 'init'이다.
예로 처음 만들어지는 child process의 parent process의 ID (PPID) 는 '1'이다.
3) 복제는 fork() 을 사용한다.
4) 복제된 프로세스는 PID, PPID, runtime을 제외하고 code, data, stack은 부모 프로세스와 같다.
5) execve() 를 이용하여 복제된 프로세스의 코드를 바꿀 수 있다.
6) fork() , execve(getty(PID X)) :
7) getty() 는 log in하라는 창이 뜨고 User ID와 비밀번호를 입력하면, bash 셀 promth를 생성한다. 여기서 다시 fork(), execve(bash)를 하면 bash 프로세스가 생성된다.
8) shell process가 실행되고 있는 상황에서 명령을 실행하면, fork()와 자기자신을 이용하여 쉘 프로세스가 복제되어진다.
9) 생성된 child-shell process의 code 부분을 지정한 실행 파일의 code로 바꾼다. 그리고 parent shell은 child process가 종료될 떄까지 기다린다. ( wait()를 사용하여 )
10) 수행된 child process가 종료되면, parent process는 깨어나서 child process의 뒷처리를 해주고 shell prompt를 깜빡깜빡 거린다.
11) child process가 실행되는 와중에도 parent process 또한 작동 중이다.
'임베디드sw공학' 카테고리의 다른 글
9.시그널 (0) | 2018.11.27 |
---|---|
12 - (3) fork(), execve(), exit(), wait() (0) | 2018.11.20 |
12-(1) Process 의 개요. (0) | 2018.11.20 |
7. 리눅스시스템 프로그래밍: File I/O (0) | 2018.11.06 |