프로세스
- 현재 시스템에서 실행 중인 프로그램을 뜻함.
- 리눅스는 기본적으로 다중 프로세스 시스템
- 여러 개의 프로세스가 동시에 실행
프로세스의 '부모-자식' 관계
- 모든 프로세스는 '부모-자식' 관계를 가지고 있음
- 필요에 따라 '부모 프로세스(Parent Process)'는 '자식 프로세스(Child Process)'를 생성
- 자식 프로세스도 부모가 되어 자식 프로세스를 만들 수 있음
- 리눅스 시스템 부팅시 스케쥴러가 실행한 프로세스 'init'과 'kthreadd' 프로세스를 제외하면
모든 프로세스는 부모 프로세스를 가지고 있음.
- 자식 프로세스는 부모 프로세스에 의해 만들어지는 프로세스
- 자식 프로세스는 작업이 끝나면 부모 프로세스에게 결과를 돌려주고 종료
프로세스의 번호 - PID(Process Identification Number)
- 각 프로세스는 고유한 번호를 가지고 있음
- PID는 1번부터 시작. 프로세스가 실행되면서 하나씩 증가
- 부팅시 PID 1번 'init', 2번 'kthreadd' 프로세스가 차레대로 실행지
(일반적으로 유닉스에서 1번 프로세스-'init' /
하지만 페도라의 경우 14버전부터 'systemd'가 1번 프로세스로 바뀜
'systemd'는 'init'과 호환성을 유지)
- 1번 프로세스는 나머지 '모든 시스템 프로세스'의 부모 프로세스가 됨.
- 2번 프로세스는 '모든 스레드의 부모 프로세스'가 됨
프로세스의 종류
데몬 프로세스 - 특정 서비스를 제공하기 위해 존재 - 리눅스 커널에 의해 실행 - 데몬은 평소에는 대기 상태. 서비스 요청이 들어오면 해당 서비스를 제공 - 리눅스에는 다양한 서비스를 제공하기 위한 데몬이 동작. - ex) sshd 프로세스(원격 접속 서비스 제공) - ssh 서버 데몬이라고 함. |
고아 프로세스 - 기본적으로 자식 프로세스는 종료되면 부모 프로세스로 돌아감 - 자식 프로세스가 아직 실행 중인 상태에서 부모 프로세스가 먼저 종료시 자식 프로세스는 고아(Orphan) 프로세스가 되버림. - 1번 프로세스가 이러한 고아 프로세스의 부모 프로세스가 되어 고아 프로세스가 작업을 마치고 종료될 수 있도록 도와줌 |
좀비 프로세스 - 자식 프로세스가 종료될 때 부모 프로세스에 종료 정보(Exit Status)를 보내고, 부모 프로세스가 이 정보를 받으면 자식 프로세스는 프로세스 테이블 목록에서 삭제 - 하지만 자식 프로세스가 종료되었음에도 프로세스 테이블 목록에 남는 경우가 있음. - 이를 좀비 프로세스라고 함. - 부모 프로세스가 자식 프로세스의 종료 정보를 제대로 처리하지 않았기 때문 - 좀비 프로세스는 프로세스 목록에서 'deefunct 프로세스' 라고 나오기도 함 - 좀비 프로세스는 실제로 동작 중인 프로세스의 테이블 목록을 차지해 좀비 프로세스가 증가해 프로세스 테이블의 목록을 차지해 용량이 부족해질 경우 정상적인 프로세스가 실행되지 않을 수도 있음 - 좀비 프로세스는 'kill' 명령으로 제거할 수 없으며, SIGCHLD 시그널을 부모 프로세스에 보내 부모 프로세스가 자식 프로세스를 정리하도록 하거나 부모 프로세스 자체를 종료시켜야만 함 - 부모 프로세스가 종료시 좀비 프로세스는 고아 프로세스가 되고, 새로운 부모인 1번 프로세스가 주기적으로 체크해 프로세스 정보를 확인하고 정리 |
시그널
시그널 - '시그널'은 어떤 이벤트가 발생했다는 것을 프로세스에 알리기 위해 전달하는 메시지 - 사용자가 특정 키를 입력했거나 'kill' 명령 같은 시스템 호출, 알람 시간, 예외 상황 등에 의해 발생 - '소프트웨어 인터럽트' 라고 할 수 있음 - 시그널은 숫자로 정의(시스템마다 시그널의 종류와 숫자가 차이가 있을 수 있음) - 시스템에서 정의한 시그널을 확인하려면 터미널에서 'kill -l' 명령 사용 - 시그널을 받은 프로세스는 시그널을 무시하거나 시그널 처리를 위해 정의된 함수를 수행 |
대표적인 시그널 |
2. SIGINT : 'Ctrl + c'를 입력했을 때 발생 3. SIGQUIT : 'Ctrl + \'를 입력했을 때 발생 9. SIGKILL : 프로세스를 종료하기 위한 시그널 10. SIGUSR1 : 사용자가 정의하는 시그널 15. SIGTERM : 'kill' 시스템 호출을 보내는 시그널 |
'OS > Linux - Ubuntu' 카테고리의 다른 글
[Linux - 리눅스 / Ubuntu - 우분투] 프로세스 종료 (0) | 2015.03.13 |
---|---|
[Linux - 리눅스 / Ubuntu - 우분투] 프로세스 관리 명령(목록, 정보, 상세정보) - ps, pgre, BSD 옵션, 유닉스 옵션, GNU 옵션 (0) | 2015.03.10 |
[Linux - 리눅스 / Ubuntu - 우분투] 우분투 무한 로그인 (0) | 2015.03.01 |
[Linux - 리눅스 / Ubuntu - 우분투] [요약] 파일 접근 권한 관리 (0) | 2015.02.28 |
[Linux - 리눅스 / Ubuntu - 우분투] 특수 접근 권한 - SetGID, SetUID, 스티키 비트 (0) | 2015.02.24 |