[이어드림스쿨 1주차] Linux - 프로세스 관리 및 작업 스케줄링

1. 프로세스 (Process)
리눅스에서 실행 중인 모든 프로그램은 프로세스라고 하며, 이는 메모리에 적재되어 실행되고 있는 하나의 작업 단위이다.
1.1 프로세스의 특징
모든 프로그램은 실행될 때 하나 이상의 프로세스를 가진다.
병렬 실행 가능 (멀티태스킹 지원).
부모 프로세스와 자식 프로세스의 관계가 형성됨.
커널(Kernel)이 프로세스를 관리.
각 프로세스는 소유자가 존재하며, 이를 기반으로 접근 권한이 부여됨.
PID (Process ID): 각 프로세스는 고유한 프로세스 ID를 가짐.
1.2 프로세스 생성: fork()
fork()
시스템 호출을 사용하면 현재 프로세스를 복사하여 새로운 프로세스를 생성한다.
원본 프로세스 → 부모 프로세스
새로 생성된 프로세스 → 자식 프로세스
#include <stdio.h>
#include <unistd.h>
int main() {
fork(); // 현재 프로세스를 복사하여 새로운 프로세스 생성
printf("Hello from process: %d\n", getpid()); // 프로세스 ID 출력
return 0;
}
➡ fork()
를 호출하면 같은 코드가 실행되는 두 개의 프로세스가 존재하게 된다.
2. 프로세스 식별 번호 (PID)
모든 프로세스는 고유한 PID를 가지며, 리눅스 시스템에서 PID 1번과 2번은 다음과 같이 예약되어 있다.
PID | 프로세스명 | 설명 |
1 | init | 모든 시스템 프로세스의 부모 프로세스 |
2 | kthreadd | 모든 스레드의 부모 프로세스 |
3. 프로세스의 메모리 구성
리눅스 프로세스는 메모리에서 다음과 같은 영역을 사용한다.
메모리 영역 | 설명 |
코드(Code) 영역 | 실행되는 프로그램 코드가 저장됨 |
데이터(Data) 영역 | 전역 변수, 정적 변수 저장 (.data , .bss ) |
힙(Heap) 영역 | 동적 메모리 할당 영역 (malloc() , new ) |
스택(Stack) 영역 | 함수 호출 시 지역 변수, 매개변수 저장 (LIFO 방식) |
➡ 코드 영역은 가장 낮은 주소, 스택 영역은 가장 높은 주소에서 시작하며, 힙과 스택은 서로 반대 방향으로 성장한다.
4. 프로세스 상태 확인 및 관리
리눅스에서 실행 중인 프로세스를 확인하고 제어하는 주요 명령어들.
4.1 ps
(Process Status)
현재 실행 중인 프로세스를 확인하는 명령어.
ps [옵션]
옵션 | 설명 |
-e | 모든 실행 중인 프로세스 출력 |
-f | 프로세스의 모든 정보 표시 |
-a | 모든 사용자의 실행 중인 프로세스 출력 |
-u | 프로세스를 실행한 사용자 정보 포함 |
-x | 터미널 제어 없이 실행된 프로세스 포함 |
✅ 예제
ps -ef
➡ 시스템 내의 모든 프로세스를 상세 정보와 함께 출력.
ps -aux
➡ 현재 실행 중인 모든 프로세스와 CPU, 메모리 사용량을 확인.
4.2 kill
(프로세스 종료)
kill [옵션] [PID]
- 특정 PID를 가진 프로세스를 종료하는 명령어.
옵션 | 설명 |
-1 | 프로세스 재시작 (SIGHUP ) |
-9 | 강제 종료 (SIGKILL ) |
-15 | 정상 종료 (SIGTERM , 기본값) |
✅ 예제
kill -9 1234
➡ PID가 1234
인 프로세스를 강제 종료.
kill -15 5678
➡ PID가 5678
인 프로세스를 정상 종료.
5. 백그라운드 작업 및 작업 제어
리눅스에서는 프로세스를 백그라운드에서 실행하거나 실행 중인 프로세스를 제어할 수 있다.
5.1 &
(백그라운드 실행)
sleep 500 &
➡ sleep 500
을 백그라운드에서 실행.
5.2 jobs
(백그라운드 작업 확인)
jobs
➡ 현재 실행 중인 백그라운드 작업 목록 출력.
5.3 fg
/ bg
fg %작업번호
: 백그라운드 작업을 포그라운드로 이동.bg %작업번호
: 백그라운드에서 일시정지된 작업을 재개.
✅ 예제
fg %1
➡ jobs
명령어로 확인한 1번 작업을 포그라운드에서 실행.
6. 작업 예약 (at
& cron
)
리눅스에서는 특정 시간에 작업을 예약하여 자동 실행할 수 있다.
6.1 at
(일회성 작업 예약)
at [시간] [날짜] [+증가시간]
옵션 | 설명 |
-l | 예약된 작업 목록 출력 (atq 와 동일) |
-f | 스크립트 파일 실행 |
-d | 예약된 작업 삭제 (atrm 과 동일) |
✅ 예제
at now + 3 hours -f script.sh
➡ 3시간 후 script.sh
실행.
6.2 crontab
(반복 작업 예약)
crontab [옵션]
옵션 | 설명 |
-l | 현재 예약된 작업 목록 출력 |
-e | 예약된 작업 수정 |
-r | 예약된 작업 전체 삭제 |
✅ crontab
설정 예제
crontab -e
➡ 크론 작업을 수정.
# 매일 오전 3시에 백업 스크립트 실행
0 3 * * * /home/user/backup.sh
# 매주 일요일 1시와 1시 30분에 실행
0,30 1 * * 0 /home/user/cleanup.sh
➡ 매일 오전 3시, 매주 일요일 1시, 1시 30분에 자동 실행.
7. SSH (Secure Shell)
SSH는 네트워크를 통해 다른 컴퓨터에 원격으로 접속하여 명령을 실행할 수 있는 보안 프로토콜이다.
7.1 SSH 서버 설치
sudo apt-get install openssh-server
➡ SSH 서버 설치.
sudo service ssh start
➡ SSH 서버 실행.
7.2 SSH 접속하기
ssh user@remote_host
➡ user
계정으로 remote_host
(IP 또는 도메인)에 SSH 접속.
ssh -p 2222 user@remote_host
➡ 포트 2222번을 사용하여 원격 접속.
8. 요약
프로세스 관리:
ps
,kill
,jobs
,fg
,bg
활용.백그라운드 실행:
&
사용 (sleep 500 &
).작업 예약:
at
(일회성),cron
(반복 실행).SSH 원격 접속:
ssh user@host
.
Subscribe to my newsletter
Read articles from KiwiChip directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

KiwiChip
KiwiChip
I'm currently learning Python and studying RAG (Retrieval-Augmented Generation).