작업 제어: jobs·fg·bg·nohup
쉽게 말하면
명령 창 하나에서 여러 일을 동시에 다루는 방법이에요. 지금 보고 있는 일(앞), 뒤에서 알아서 도는 일(뒤), 잠시 멈춘 일을 오가요. 끝에 &를 붙이면 처음부터 뒤에서 돌아요.
시험용 정의
작업 제어는 한 셸에서 여러 작업을 포그라운드·백그라운드로 오가며 다루는 기능이다. &로 백그라운드 실행, Ctrl+Z로 정지, jobs로 목록, fg·bg로 전환한다.
비유로 이해하기
요리사가 냄비 여러 개를 다루는 것이다. 지금 젓고 있는 냄비(포그라운드), 불 위에서 알아서 끓는 냄비(백그라운드), 불 꺼 둔 냄비(정지).
자세히
포그라운드와 백그라운드
- 포그라운드: 터미널을 차지하고 실행되는 작업. 끝날 때까지 프롬프트가 돌아오지 않고, 키보드 입력과 Ctrl+C·Ctrl+Z가 이 작업에 간다
- 백그라운드: 터미널을 비워 둔 채 뒤에서 실행되는 작업. 바로 프롬프트가 돌아와 다른 명령을 칠 수 있다. 키보드 입력은 받지 못한다
- 작업(job): 셸이 자기가 띄운 명령에 붙이는 번호(%1, %2). 그 셸 안에서만 통한다. 시스템 전체에서 쓰는 PID와는 다른 번호다
터미널을 닫거나 로그아웃하면 셸이 자기 작업들에게 SIGHUP(hang up, 연결 끊김) 시그널을 보내고, 대부분 프로그램은 이 시그널을 받으면 끝난다. nohup은 명령이 SIGHUP을 무시하게 해서 로그아웃한 뒤에도 계속 돌게 한다.
시험에 이렇게 나와요
- 명령을 백그라운드로 실행 → 명령 뒤에
& - 백그라운드 작업 목록 확인 →
jobs - 포그라운드 작업을 멈춰 백그라운드로 보내는 첫 단계 → Ctrl+Z(그다음 bg), 포그라운드 작업 종료 → Ctrl+C
- 로그아웃한 뒤에도 계속 실행 →
nohup
확인 문제
Q1. vi로 파일을 편집하다 Ctrl+Z를 눌렀다. vi는 어떻게 될까?
- 자동 저장 후 종료된다
- 저장 없이 종료된다
- 로그아웃된다
- 정지된 채 백그라운드 작업으로 남아 fg로 돌아올 수 있다
정답 보기
4번 정지된 채 백그라운드 작업으로 남아 fg로 돌아올 수 있다
Ctrl+Z는 SIGTSTP를 보내 포그라운드 작업을 일시 정지시키고 셸로 돌아온다. jobs로 목록을 보고 fg로 다시 불러오거나 bg로 백그라운드에서 이어서 실행할 수 있다.
Q2. 현재 셸에서 백그라운드로 돌고 있는 작업 목록을 보는 명령은?
- top -b
- bg -l
- ps -b
- jobs
정답 보기
4번 jobs
jobs다. 지금 셸의 작업 번호와 상태를 보여 준다. ps는 셸과 상관없이 프로세스를 본다.
Q3. 포그라운드에서 실행 중인 작업을 백그라운드로 옮기려 한다. 먼저 누르는 키는?
- Ctrl+D
- Ctrl+\
- Ctrl+C
- Ctrl+Z
정답 보기
4번 Ctrl+Z
Ctrl+Z로 정지 → bg로 백그라운드에서 계속.
Q4. Ctrl+Z로 정지시킨 작업을 백그라운드에서 이어서 실행하는 명령은?
- bg
- nohup
- fg
- jobs
정답 보기
1번 bg
bg다. 멈춘 작업을 백그라운드에서 이어 실행한다. fg는 포그라운드(앞)로 가져온다.
Q5. 로그아웃한 뒤에도 작업이 계속 실행되게 하는 명령은?
- at
- bg
- nohup
- nice
정답 보기
3번 nohup
nohup (HUP 시그널 무시).
Q6. 2번 작업을 포그라운드로 가져오는 명령은?
- fg 2
- fg -2
- fg %2
- jobs -f 2
정답 보기
3번 fg %2
fg %2 (bash는 fg 2도 받아 주지만 표준 표기는 %2).
헷갈리기 쉬운 O·X
jobs 명령은 시스템 전체 사용자의 작업을 보여 준다.
정답 보기
X 현재 셸의 작업만.
nohup으로 실행한 명령의 출력은 기본적으로 nohup.out에 저장된다.
정답 보기
O 맞는 설명이다.
작업 번호와 PID는 같은 번호다.
정답 보기
X 작업 번호는 셸 안의 순번, PID는 시스템 전체 번호.