목차
1. 포그라운드와 백그라운드
1.1. 포그라운드(Foreground)
• 입력한 명령어 실행이 결과가 나올 때까지 기다리는 방식
• 한 동작을 수행할 동안 다른 동작은 할 수 없는 상태
• 포그라운드 작업: 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 방식
1.2. 백그라운드(Background)
• 하나의 쉘(터미널)에서 여러 개의 프로세스를 동시에 실행할 수 있는 방식
• 한 동작을 수행하는 동안에도 다른 동작을 할 수 있는 상태
• 해당 명령어 처리가 오래 걸릴걸 대비해 백그라운드를 이용하면 여러 작업을 동시에 수행할 수 있다.
• 필요한 여러 작업을 백그라운드로 실행한 후 터미널에서는 포그라운드 작업을 계속 진행할 수 있다.
2. 프로세스 실행
2.1. 포그라운드 작업
• 일반적인 명령어 실행 방식입니다.
• 다음은 vi를 이용해 파일을 열은 상태인데 작업이 끝날 때까지 다른 작업을 동시에 수행할 수 없습니다.
2.2. 백그라운드 작업
# 명령어 &
: 이 방식의 백그라운드 프로세스 실행은 터미널이 끊기면 실행이 멈춰지게 됩니다.
# nohup 명령어 &
: 이 방식의 백그라운드 프로세스 실행은 터미널 연결이 끊어져도 실행을 멈추지 않습니다.
: No Hang Up Signal
[
백그라운드에서 실행시킬 스크립트 파일 내용
1초마다 카운트하여 number.txt 파일에 기록하는 스크립트 파일
]
# cat test.sh
number=0
while true; do
sleep 1
number=`expr $number + 1`
echo ${number} >> number.txt
done
[백그라운드 실행]
# sh test.sh &
또는
# nohup sh test.sh &
또는(nohup 파일을 생성하지 않음)
# nohup sh test.sh 1>/dev/null 2>&1 &
[2] 30870
[백그라운드 실행 확인]
# tail -f number.txt
8
9
( ... ) 생략
[프로세스 확인]
# ps -ef | grep test.sh | grep -v grep
root 30870 15023 0 20:47 pts/1 00:00:00 sh test.sh
[백그라운드 프로세스 종료]
# kill -9 30870
또는
# kill -9 `ps -ef | grep test.sh | grep -v grep | awk '{print $2}'`
3. 프로세스 전환
3.1. jobs 명령어
• 백그라운드로 실행되는 작업목록(작업번호, 상태, 명령어)을 보여주는 리눅스 명령어
• 현재 쉘(터미널)에서 작업이 중지된 상태나 백그라운드로 진행 중인 상태를 출력하는 명령어
• nohup 명령어로 실행된 백그라운드 프로세스일지라도 현재 쉘(터미널)이 끊길경우 포그라운드로 전환할 수도 없고 jobs에 출력되지 않습니다.
# jobs [-lnprs] [Job ID]
백그라운드 프로세스 종료(%필수 입니다.)
# kill %작업번호
[OPTIONS]
-l
: 프로세스 ID를 state 필드 앞에 출력
-n
: 프로세스 그룹 중에 대표 프로세스 ID 출력
-p
: 프로세스 ID만 출력
-r
: 실행 중인 작업만 출력
-s
: 정지한 작업만 출력
[
필드 값: 작업번호, 작업순서(+,-), 상태, 명령
작업번호와 PID는 다릅니다.
작업순서표시
+ : 가장 최근에 접근한 작업
- : + 작업 전에 접근한 작업
]
# jobs
[1]- Running nohup sh server_check.sh > /dev/null 2>&1 &
[2]+ Running sh test.sh &
[1번 작업 출력]
# jobs 1
[1]- Running nohup sh server_check.sh > /dev/null 2>&1 &
[필드 값: 작업번호, 작업순서, PID, 상태, 명령]
# jobs -l
[1]- 6438 Running nohup sh server_check.sh > /dev/null 2>&1 &
[2]+ 7280 Running sh test.sh &
[PID 출력]
# jobs -p
6438
7280
[실행중인 백그라운드 프로세스 출력]
# jobs -r
[1]- Running nohup sh server_check.sh > /dev/null 2>&1 &
[2]+ Running sh test.sh &
[백그라운드 프로세스 종료]
# kill %2
3.2. 포그라운드 → 백그라운드
• 전환을 위해 포그라운드 프로세스는 정지를 시키고 백그라운드 프로세스로 전환해야 합니다.
• 포그라운드 프로세스 → 프로세스 정지 → 백그라운드 프로세스 전환
# bg %작업번호
작업 번호는 생략 가능합니다.(순차적으로 알아서 작업 번호가 추가됩니다.)
리눅스 단축키
Ctrl+D : 프로세스 정상종료
Ctrl+C : 프로세스 강제종료
Ctrl+Z : 프로세스 정지 (Stop)
[1. 포그라운드로 실행]
# sh test.sh
[2. Ctrl + z를 이용해 중지 상태로 변경]
^Z
[2]+ Stopped sh test.sh
# jobs
[1]- Running nohup sh server_check.sh > /dev/null 2>&1 &
[2]+ Stopped sh test.sh
[3. bg 명령어를 이용해 백그라운드로 전환]
# bg
[2]+ sh test.sh &
# jobs
[1]- Running nohup sh server_check.sh > /dev/null 2>&1 &
[2]+ Running sh test.sh &
3.3. 백그라운드 → 포그라운드
# fg %작업번호
[1. 백그라운드 프로세스 상태 확인]
# jobs
[1]- Running nohup sh server_check.sh > /dev/null 2>&1 &
[2]+ Running sh test.sh &
[2. [2]번 백그라운드 작업 포그라운드로 전환]
# fg %2
sh test.sh
'OS > Linux' 카테고리의 다른 글
[Linux] 리눅스 시그널 명령어(프로세스 종료) - kill (0) | 2021.10.03 |
---|---|
[Linux] 리눅스 파일의 원하는 행과 열 출력 - awk (1) | 2021.09.25 |
[Linux] 서버 상태 확인 스크립트 (0) | 2021.09.21 |
[Linux] 리눅스 프로세스 상태 확인하기 - ps (0) | 2021.09.20 |
[Linux] 리눅스 원하는 파일 찾기 - find (0) | 2021.09.19 |