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

KiwiChipKiwiChip
4 min read

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프로세스명설명
1init모든 시스템 프로세스의 부모 프로세스
2kthreadd모든 스레드의 부모 프로세스

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.

0
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).