[OS] 셸, 작업/세션 관리와 PGID, Daemon
1. 셸, 작업/세션 관리
1.1. 셸(Shell)이란?
- 사용자와 운영체제(kernel) 사이의 인터페이스 역할을 하는 프로그램/환경
1.2. 작업(Job)이란?
- 셸이 Background로 프로세스를 제어하는 동작 구조
1.3. 세션(Session)이란?
- 사용자가 Terminal(ex: ssh)을 사용해 시스템에 로그인 했을 때, 활동하는 상태 등을 관리하는 단위
- 각 세션에는 해당 세션을 제어하는 Terminal 존재 → Session ID 통해 관리
1.3.1. 세션의 확인
ps ajx
명령어 사용
- 터미널이 닫히면 세션이 닫히고, 실행중이던 모든 프로세스가 종료1된다.
- 따라서 세션이 안 끊기도록 유지를 잘 할 필요가 있음
만약 긴 작업을 돌려야 한다면 어떻게 해야 될까? 터미널이 닫혀도 계속 실행되게 할 수 없을까?
작업을 계속 켜 둘 방법이 없을까?
1.4. 작업을 오래 돌리는 방법
- ssh의 경우,
timeout
시간을 증가시키거나,heartbeat
를 주기적으로 보낸다. - nohup 명령어를 사용한다.
SIGHUP
을 무시하도록 설정하고 프로세스를 가동하는 것이다.- 만약 세션이 종료되어도, 프로세스를 종료하지 않도록 한다.
example: nohup이 없을 때
example: nohup이 있을 때
2. 프로세스 그룹(PGID)
- 여러 프로세스를 하나로 묶어서 관리하는 단위 (PGID)
2.1. Foreground Process Group
- 현재 사용자가 직접 사용하고 있는 프로세스(터미널에서 접근 가능)
- 세션당 하나만 존재
- 만약 여러 프로세스가 pipe로 연결된다면 하나의 프로세스 그룹임
2.2. Background Process Group
- 사용자와 직접적인 상호작용 없이 실행되고 있는 프로세스
- 터미널 세션과 관련 없이 실행 → 사용자 입력을 기다리지 않음
예시
ps ajx | less
명령어
ps ajx | cat | cat | cat | cat
명령어
3. 데몬(Daemon)2
상주하는 프로세스로, 백그라운드로 실행된다.
- 터미널 입출력 필요 X → 단말 할당이 없음
- 로그인 세션 종료해도 영향 받지 않도록 독자적인 세션 가짐
- 데몬 생성한 프로세스가 데몬 종료 여부를 신경쓰지 않도록,
init
가 부모가 됨
위의 조건을 전부 만족하지 않더라도, 그냥 상주하기만 하면 편의상 Deamon 혹은 Service라고 부른다.
각주
이 포스팅은 작성자의 CC BY-NC 4.0 라이선스를 준수합니다.