2022. 11. 20. 17:36ㆍ리눅스(Linux)
What is Process?
- 컴퓨터의 CPU에서 실행되는 모든 프로그램을 프로세스라고 한다.
$ Multitasking의 개념
- 시스템은 기본적으로 하나의 CPU를 가지고 있으며, 그것을 최적화하기 위하여 time-sharing 기법을 이용한다
$ Process의 종류
- 프로세스에는 대화형 프로세스, 배치 프로세스, 데몬 프로세스로 구분 되어 진다.
$ 각 Process의 기본규칙
- 각각의 프로세스마다 고유 번호의 프로세스 ID(PID)를 하나씩 증가시키면서 부여한다.
- 더이상 할당할 PID가 없으면, 사용되지 않는 가장 낮은 숫자로 되돌아가 다시 할당 한다
$ 프로세스는 파일의 소유권과 유사한 방식의 소유권을 갖는다
- 프로세스를 실행하는 사용자의 UID가 프로세스의 실제 사용자 UID로 할당된다
- SetUID와 같은 특수한 경우 실행하는 사용자의 UID가 아닌 파일의 소유자가 실행 한것처럼 실행된다(EUID/EGID)
대화형 프로세스
$ 터미널과 세션을 통하여 사용자와 정보를 주고받으며 실행하는 프로세스를 말한다
- 프로그램과 정보를 주고받는 동안 프로세스는 포그라운드로 실행되며 터미널과의 입출력 교류도 이루어진다
- 포그라운드에서 실행되고 있는 프로세스는 그 프로세스가 종료되거나 일시중지 될 때까지 터미널에 대한 완벽한 제어권을 가지며, 포그라운드 프로세스가 일시 중지된 후 백그라운드 프로세스로 전환되면, 터미널의 제어권은 백그라운드 프로세스의 부모 프로세스(일반적으로 쉘)에게 넘어간다
- 터미널 상에서 입출력 작업이 필요하지 않다면 백그라운드 상태에서 수행을 계속 할 수 있다.
- 대화형 프로세스 제어 또는 작업 제어(job control)는 프로세스를 포그라운드나 백그라운드로 전환하는 역할을 하고, 포그라운드에서 실행을 계속할 수 있도록 제어 한다
배치 프로세스
$ 일련의 작업을 몰아서 특정 시각에 실행 시키는 것이며, 일반적으로 터미널과의 입/출력 교류가 전혀 없다
- 중요하지 않은 작업에 대해 시스템의 사용률이 낮을때 처리하는데 매우 유용
- batch 명령어와 at 명령어를 사용한다
데몬
$ 데몬은 특정 서비스를 위해 백그라운드 상태에서 계속 실행되는 서버 프로세스이다
- 일반적인 서비스는 각각의 서비스가 사용하는 포트를 관리하는 데몬이 존재한다
- 다른 데몬들에게 할당된 포트를 관리하는 특별한 용도의 데몬도 존재한다
좀비 프로세스
- 자식 프로세스가 종료 되었는데, 부모 프로세스에게 SIGCHLD 전달이 안되었을 때 혹은 손실(lost) 되었을 때 발생
- 자식 프로세스는 종료 되었는데 부모 프로세스는 종료되지 않았거나, wait() 계열 함수를 호출해서 자식 프로세스를 정리하지 않았을 때 발생
- 파일 등의 모든 자원 및 메모리 이미지 역시 해제 하였으며 프로세스 테이블만 유지하고 있는 상태이다
Foreground & Background Process
$ Foreground Process?
- 쉘 상태에서 명령을 내리면 사용자는 해당 프로세스가 종료될 때까지 기다려야 함
# cp -R /usr/sbin/ /tmp/
ㅣ
$ Background Process?
- 일반적으로 명령뒤에 "&"를 붙여서 동작시키며, 명령을 내린 사용자는 자신이 하고자하는 다른 명령어를 계속 실행 할 수 있음
# cp -R /usr/sbin/ /tmp/ &
[1] 26662
#
[1]+ Done
2 cp -i -R /usr/sbin /tmp/ &
#
at / batch 를 이용한 배치 프로세싱
- at와 batch는 /bin/sh를 이용하여 지정된 시점에 실행할 명령을 표준 입력이나 지정한 파일에서 읽어들인다
부모 프로세스와 자식 프로세스
- 프로세스는 여러가지 기능을 수행함으로써 주어진 작업을 완료하며, 모든 기능이 완료되기 전까지는 종료될 수 없다
- 부모 프로세스는 여러 개의 자식 프로세스를 실행하여 다수의 작은 작업들을 동시에 처리하도록 할 수 있다
$ exec
- 한 프로세스가 다른 프로세스를 생성(spawn)할 경우 원래의 프로세스가 더는 남아있을 필요가 없다면 exec호출을 통해서 다른 프로그램을 실행하고 새로운 프로세스로 자신을 대체 할 수 있다
$ fork
- exec에 반해 원래 프로세스가 계속 존재해야 한다면 fork를 호출하여 자신의 복사본 프로세스를 먼저 만들고 복사본 프로세스에서 다시 exec를 호출하여 다른 프로그램을 실행하는 새로운 프로세스로 자신을 대체한다
init 프로세스
- 리눅스 시스템에서 가장 중요한 프로세스이며, 부트 과정에서 커널이 수행하는 마지막 작업이다
$ init 프로세스의 역할
- 파일시스템의 점검과 마운트
- 필요한 데몬 동작
- 시스템 구성에 필요한 기타설정
- 부모 프로세스가 없는 자식 프로세스에 대한 부모 프로세스 역활
SIGNAL
- 프로세스에게 발생하는 비동기적인 사건(asynchronous event)
- 한 프로세스가 다른 프로세스에게 보낼 수도 있고, 커널이 프로세스에게 보낼 수도 있음
- 비동기적이므로 어느 시점에서 시그널이 발생한지 미리 예측할 수 없음
$ SIGNAL 이 발생하는 경우
- 키보드를 통해 발생 (CTRL + C(SIGINT), CTRL + Z(SIGSTOP))
- 다른 프로세스에 의해서 발생
- 커널 내부에서 발생 (Kill(), alarm() 과 같은 시스템 콜)
SIGNAL 종류
번호 | 시그널 이름 | 발생 및 용도 | 디폴트 action |
1 | SIGHUP(HUP) | 연결끊기 (프로세스의 설정파일을 다시 읽는데 사용) 실행 종료 (로그아웃 되거나 모뎀 접속을 끊을 때 발생) |
종료 |
2 | SIGINT(INT) | 인터럽트 (실행종료, CTRL+C를 입력할 때 발생) | 종료 |
3 | SIGQUIT(QUIT) | Quit (실행종료, CTRL+/를 입력할 때 보내짐) | 종료 (코어덤프) |
4 | SIGILL(ILL) | 잘못된 명령 | |
5 | SIGTRAP(TRAP) | 트랩 추적 | |
6 | SIGIOT(IOT) | IOT 명령 | |
7 | SIGBUS(BUS) | 버스 에러 | |
8 | SIGFPE(FPE) | 부동 소수점 에러 | 종료 |
9 | SIGKILL(KILL) | 즉시 중지 이 시그널은 잡히지 않음. |
종료 |
10 | SIGUSR1(USR1) | 사용자 정의 시그널1 | 종료 |
11 | SIGSEGV(SEGV) | 세그멘테이션 위반 (허가되지 않은 메모리 영역 접근) | |
12 | SIGUSR2(USR3) | 사용자 정의 시그널2 | 종료 |
13 | SIGPIPE(PIPE) | 읽을 것이 없는 파이프에 대한 시그널 (읽으려는 프로레스가 없는데 파이프에 쓰려고 함) |
종료 |
14 | SIGALRM(ALRM) | 경보(Alarm) 시그널 (Alarm(n)에 읭해 n초 후에 생성됨) |
종료 |
15 | SIGTERM(TERM) | 소프트웨어 종료 시그널 (kill 시그널이 전송되기 전에 전송. 잡히는 시그널이기 때문에 종료되는 것을 트랙할 수 있음) |
종료 |
16 | SIGKFLT | 코프로세서 스택 실패 | |
17 | SIGHLD(CHLD) | 프로세스 종료시 그 부모 프로세스에게 보내지는 시그널 | 무시 |
18 | SIGCONT(CONT) | Continue (STOP이나 TSTP에 의해 정지된 프로세스가 다시 실행을 계속함.) |
|
19 | SIGSTOP(STOP) | 정지 시그널 (SIGSTP와 같으나 잡거나 무시할 수 없음. 무조건적 즉시 정지함.) |
프로세스 정지 |
20 | SIGTSTP(TSTP) | 키보드에 의해 발생하는 시그널 Ctrl + Z로 생성. 실행을 정지 후 다시 실행을 계속하기 위해 대기함. (터미널 정지 문자) |
프로세스 정지 |
21 | SIGTTIN | 백그라운드에서의 제어터미널 읽기 | 프로세스 정지 |
22 | SITTTOU | 백그라운드에서의 제어터미널 쓰기 | 프로세스 정지 |
23 | SIGURG | 소켓에소의 긴급한 상태 | |
24 | SIGXCPU | CPU 시간 제한 초과. | |
25 | SICXFSZ | 파일 크기 제한 초과. | |
26 | SIGVTALRM | 가상 시간 경고 | |
27 | SIGROF | 프로파일링 타이머 경고 | |
28 | SIGWINCH | 윈도우 사이즈 변경 | |
29 | SIGIO | 기술자에서 입출력이 가능함. | |
30 | SIGPWR | 전원 실패 | |
31 | UNUSED | 사용 안함 |
'리눅스(Linux)' 카테고리의 다른 글
[Centos 7] process management tools (프로세스 관리 도구) - htop, monit, Nmon (0) | 2022.11.21 |
---|---|
[Centos 7] Process Management (프로세스 관련 명령어) (0) | 2022.11.20 |
[Centos 7] Ownership / Permissions (소유자/권한) (0) | 2022.11.20 |
[Centos 7] User Account Management(사용자 계정 관리) (0) | 2022.11.20 |
[Centos 7] String Process(문자열 프로세스) - sed, echo, diff, sort (0) | 2022.11.17 |