-
시스템이 구동 될 때, 커널은
/etc
에 위치한 init 이라는 스크립트를 실행함으로써 시스템 서비스들을 차례대로 시작시킨다. 이 서비스들은 데몬 프로그램(background)으로 구현되어 있기 때문에 로그인하지 않은 상태에서도 필요 작업들을 수행한다. -
프로그램은 프로그램을 실행시킬 수 있는데, 이를 부모와 자식 프로세스라고 표현한다.
ps
- 리눅스는 다중 사용자, 사용 작업 시스템이기 때문에 여러 개의 프로세스를 동시에 수행하기 때문에 항상 어떤 프로세스들이 실행되고 있는지 모니터링할 필요가 있다. ps는 이를 위해 현재 시스템에서 실행 중인 프로세스에 관한 정보를 출력하는 명령어이다.
부모 프로세스와 자식 프로세스의 관계를 보려면
ps -ef
, 프로세스 상태를 보는 용도로는ps aux
를 주로 사용한다.
pstree
- 프로세스를 트리 형태로 출력한다.
pgrep
-
지정한 패턴과 일치하는 프로세스의 정보를 출력한다.
-
파일 패턴 검색 명령어인 grep 명령어의 프로세스 버전이라고 보면된다.
프로세스 전환 (foreground / background)
-
foreground: 보통 터미널에서 명령어를 입력하면 그 명령이 끝날때 까지 다른 명령어를 입력할 수가 없다. 이렇게 대화식으로 하나씩 주고 받게 되는데 이를 foreground라고 생각하면 된다.
-
background: 반면 background는 명령어를 입력하면 다른 명령어도 실행이 가능하다. background라는 의미에서 유추할 수 있듯이 뒤에서 실행된다고 생각하면 된다. 물론 터미널이 닫히거나 로그아웃 될경우 종료 된다.
jobs
-
jobs
명령어는 현재 돌아가고 있는 background 프로세스 리스트를 모두 출력해준다. -
background 프로세스는 스택처럼 쌓이는데, +는 스택의 가장 위에 있다는 뜻이고 -는 바로 그다음 밑에 있다는 뜻이다.
background processing (&)
-
명령어들을 background에서 처리하면 foreground에서는 다른 작업을 할 수 있으며 동시에 여러 작업을 수행할 수 있다.
-
명령어의 맨 끝에
&
를 붙여 사용하면 background로 명령어가 실행된다.
foreground -> background (bg)
- foreground에서 실행중인 명령에서
Ctrl + z
를 누른후 (일시정지)bg [job번호]
명령을 치면, background로 전환된다.
background -> foreground (fg)
-
fg는 background에서 foreground로 전환하는 명령어이다. job 번호를 생략하면 스택 제일 위에 있는 것이 foreground로 들어온다.
-
background로 실행시킨 프로세스를 일시중지 시키려면 fg로 가져와서
Ctrl + z
해주면 된다.
프로세스 우선순위
- 스케줄링시 반영되는 우선순위를 관리할 수 있다.
nice
-
프로세스의 우선순위를 의미하는 nice 값을 설정한다.
-
nice 명령어의 우선순의 숫자 조절 연산은, 대시(
-
) 하나는 증가, 두개(--
)는 감소이다.
[우선순위 NI 값 범위]
- 사용자가 지정할 수 있는 우선순위 값은 -20부터 19까지인데 값이 낮아야 우선순위가 높으므로, 가장 높은 우선순위는 -20이 되게 된다.
- 가장 높은 우선순위 NI 값 : -20
- 가장 낮은 우선순위 NI 값 : 19
- 기본적으로 주어지는 디폴트 값: 0
renice
-
현재 실행중인 프로세스의 nice값을 변경한다.
-
nice는 프로세스명으로 우선순위를 조정하고, 명령을 실행하면 새로운 프로세스가 발생하지만, renice는 PID로 우선순위를 조정하고 기존의 프로세스 우선순위 값을 추가없이 바로 수정한다.
nohup
- 일반적으로 시스템에서 로그아웃하면 로그아웃한 세션과 연관된 모든 프로세스에게 HUP 시그널(1)을 보내서 관련된 모든 프로세스가 자동으로 종료되지만, nohup을 사용하면 해당 시그널을 가로채 무시하기 때문에 로그아웃하더라도 프로세스를 계속 실행되게 된다.
- 즉, 사용자가 로그아웃해도 실행중인 프로세스를 백그라운드로 유지시켜주는 명령어이다.