cmod.ify

[LINUX] 프로세스 본문

BASIC/LINUX

[LINUX] 프로세스

modifyC 2026. 1. 8. 18:53
728x90
반응형

1. 프로세스(Process) 개요

  • 정의: 실행 중인 프로그램을 의미함.
  • 다중 프로세스 시스템: 리눅스는 여러 개의 프로세스를 동시에 실행할 수 있는 구조임.
  • 프로세스 구분: 시스템 운영에 필요한 기능을 수행하는 시스템 프로세스와 사용자가 실행한 사용자 프로세스로 나뉨.
  • 부모-자식 관계: 프로세스는 계층 구조를 가짐. 부모가 자식을 생성하고, 그 자식이 또 다른 자식을 생성할 수 있음.
  • 최상위 프로세스: 부모가 없는 뿌리 프로세스로 부팅 시 실행되는 systemd와 kthreadd가 있음.

2. 프로세스 번호 (PID)

  • PID (Process Identifier): 각 프로세스에 부여된 고유 번호.
  • 특징: 1번부터 시작하며 새로운 프로세스가 실행될 때마다 1씩 증가함.
  • 주요 PID:
    • 1번: systemd (우분투 기준 최상위 프로세스, 과거 유닉스의 init 역할 수행)
    • 2번: kthreadd
  • 참고: /sbin/init은 실제로 /lib/systemd/systemd를 가리키는 심볼릭 링크임.

3. 프로세스의 종류

종류 특징 및 설명
일반 프로세스 할 일을 마치면 스스로 종료되는 일반적인 프로그램.
데몬(Daemon) 특정 서비스 제공을 위해 백그라운드에서 계속 실행됨. '서비스'라고도 함.
고아 프로세스 자식이 실행 중인데 부모가 먼저 종료된 경우. 1번 프로세스(systemd)가 새 부모가 되어 수습함.
좀비 프로세스 실행은 끝났으나 부모가 종료 정보를 읽어가지 않아 프로세스 테이블에 남은 상태. 목록에 defunct로 표기됨.

4. 좀비 프로세스 관리

  • 위험성: 좀비 프로세스가 쌓이면 프로세스 테이블이 가득 차서 새로운 프로세스 생성이 불가능해짐.
  • 해결법: kill 명령어로 직접 삭제가 불가능함. 부모 프로세스에 SIGCHLD 시그널을 보내 정리하게 하거나, 부모 프로세스 자체를 종료해야 함.

5. 프로세스 목록 확인 (ps)

  • 기본 형식: ps [옵션]
  • 유닉스 옵션 (대시 사용):
    • -e: 모든 프로세스 확인.
    • -f: 상세 정보(UID, PID, PPID 등) 출력.
    • -u [UID]: 특정 유저의 프로세스 확인.
    • -p [PID]: 특정 PID 정보 확인.
  • BSD 옵션 (대시 미사용):
    • a: 터미널에서 실행시킨 프로세스.
    • u: 상세 정보 출력.
    • x: 모든 프로세스 정보.
  • 활용: ps -ef | grep bash (배시 프로세스 상세 검색)

6. 프로세스 종료 및 시그널

프로세스에 특정 시그널을 보내서 동작을 제어함. (목록 확인: kill -l)

주요 시그널

  • 2 (SIGINT): 인터럽트. 작업을 멈춤 (Ctrl+C).
  • 9 (SIGKILL): 강제 종료. 즉시 소멸시킴.
  • 15 (SIGTERM): 안전한 종료. 자원 정리 후 종료 유도 (기본값).

7. 종료 명령어 (kill, pkill)

  • kill 명령: kill [-시그널] PID 형식으로 사용.
    • 예: pgrep -x man으로 PID 확인 후 kill 2440 실행.
  • pkill 명령: 프로세스 이름으로 종료. 같은 이름을 가진 모든 프로세스를 한꺼번에 종료함.
    • 형식: pkill [프로세스 이름]

8. 실시간 모니터링 (top)

  • 프로세스의 상태와 자원(CPU, 메모리) 사용량을 주기적으로 갱신하여 화면에 출력함.

9. 작업 제어 (Job Control)

리눅스에서 프로세스가 실행되는 방식에 따라 포그라운드와 백그라운드로 나뉨.

① 포그라운드(Foreground) 작업

  • 특징: 명령 실행 후 결과가 출력될 때까지 사용자가 기다려야 하는 방식.
  • 상태: 명령이 실행 중일 때는 프롬프트가 나타나지 않아 다른 명령을 입력할 수 없음.
  • 예시: sleep 100 (100초 동안 대기하며 터미널 점유)

② 백그라운드(Background) 작업

  • 특징: 명령의 종료 여부와 상관없이 즉시 프롬프트를 출력하여 다른 작업을 가능하게 함.
  • 실행 방법: 명령 끝에 & 기호를 붙임.
  • 예시: sleep 100 &
  • 주의사항: 백그라운드 작업이 화면에 메시지를 출력하면 현재 작업 중인 내용과 섞여 보일 수 있음. 따라서 출력 내용을 파일로 저장(리다이렉션)하는 것이 권장됨.
    • 예: find / -name passwd > pw.dat 2>&1 & (결과와 에러를 모두 파일로 보냄)

10. 백그라운드 작업 조회 (jobs)

현재 터미널 세션에서 실행 중인 백그라운드 작업의 목록을 확인하는 명령어임.

  • 형식: jobs [%작업번호]
  • 기호의 의미:
    • +: 가장 최근에 접근하거나 제어한 작업.
    • -: + 작업 바로 이전에 접근한 작업.
    • 공백: 그 외의 순번인 작업.

실행 결과 해석 예시

[1]+ Running sleep 100 &

  1. [1] (작업 번호): 프로세스 번호(PID)와 별개로 부여되는 작업의 고유 번호.
  2. 작업 상태:
    • Running: 현재 실행 중인 상태.
    • Stopped: Ctrl + Z 등을 눌러 실행이 일시 중지된 상태.
    • Done: 작업이 정상적으로 완료된 상태.
    • Terminated: 강제로 종료된 상태.
  3. 작업 내용: 실행 중인 명령어 정보.

11. 작업 전환 및 제어 키

제어 키 / 명령어 기능 및 특징
Ctrl + C 포그라운드 작업을 강제로 종료함.
Ctrl + Z 포그라운드 작업을 일시 중지시키고 백그라운드로 보냄.
fg [%작업번호] 백그라운드 작업을 포그라운드로 가져옴.
bg [%작업번호] 중지된 작업을 백그라운드에서 다시 실행시킴.

💡 팁: 작업 시간이 오래 걸리는 대용량 압축이나 파일 검색 시에는 &를 붙여 백그라운드로 실행하면 터미널을 기다림 없이 계속 사용할 수 있어 효율적임


12. 프로세스 관리 및 작업 전환

  • 작업 전환 커맨드
    • ctrl + z: 실행 중인 포그라운드 작업을 즉시 중지(Suspend). 종료가 아닌 일시 중단 상태로 전환됨.
    • bg %작업번호: 중단된 작업을 백그라운드(Background)에서 재개.
    • fg %작업번호: 백그라운드 작업을 포그라운드(Foreground)로 가져옴.
    • jobs: 현재 세션에서 관리 중인 작업 목록 및 상태 확인.

13. 작업 종료

  • 종료 방법
    • ctrl + c: 포그라운드 작업 종료. 인터럽트(Interrupt) 시그널을 전달하나, 프로그램 설정에 따라 무시될 수 있음.
    • PID 이용: 다른 터미널에서 ps로 PID를 찾아 kill -9 [PID] 명령으로 강제 종료.
    • 작업 번호 이용: kill %작업번호를 통해 백그라운드 작업 종료 가능.

14. 실습 기록

  • 백그라운드 실행 및 종료
    hapi@basic:~$ sleep 100 &      # 100초 대기 작업을 백그라운드 실행
    [2] 1468                       # 작업번호 2, PID 1468 할당
    hapi@basic:~$ jobs             # 상태 확인
    [2]+  Running                 sleep 100 &
    hapi@basic:~$ kill %2          # 2번 작업 종료
    hapi@basic:~$ jobs             # 종료 확인
    [2]+  Terminated              sleep 100
    
  • 로그아웃 후 작업 유지
    • nohup [명령어] &: 터미널을 닫거나 로그아웃해도 프로세스를 종료하지 않고 계속 실행.

15. 작업 예약 (at)

  • 개요: 정해진 특정 시각에 명령을 한 번만 수행.
  • 형식: at [옵션] [시각]
  • 주요 옵션
    • -l: 실행 대기 중인 작업 전체 목록 출력 (atq와 동일).
    • -r [작업번호]: 해당 예약 작업 삭제 (atrm과 동일).
    • -m: 출력 결과가 없어도 완료 시 메일 발송.
    • -f [파일]: 표준 입력 대신 실행할 명령이 적힌 파일을 지정.

16. 시각 설정 예시

  • at 4am + 3days: 3일 후 오전 4시
  • at 10am Jul 31: 7월 31일 오전 10시
  • at 1am tomorrow: 내일 오전 1시
  • at 1am today: 오늘 오전 1시

17. at 실습 및 확인

  • 작업 기록 위치: /var/spool/cron/atjobs에 저장되며 수행 후 자동 삭제됨.
  • 대화형 설정
    at 9:48 am
    at> /usr/bin/ls > ~hapi/study/at.out
    at> <ctrl+d> (EOT 입력)
    
  • 파일 활용 예약
    • vim at.sh 작성 후 sudo at -f ~hapi/study/at.sh 01:24 am 실행.

18. at 사용 제한 관리

  • 제한 파일: /etc/at.allow, /etc/at.deny (계정명을 한 줄에 하나씩 입력).
  • 우선순위
    1. at.allow 존재 시: 여기에 기록된 사용자만 가능 (at.deny 무시).
    2. at.allow 부재 시: at.deny에 기록된 사용자 제외 모두 가능.
    3. 둘 다 부재 시: root만 사용 가능.
    • 초기 설정: at.deny만 빈 상태로 존재하여 모든 사용자 허용됨.

19. 주기적인 반복 작업 (crontab)

  • 형식: crontab [-u 사용자ID] [옵션] [파일명]
  • 옵션
    • -e: 예약 파일 편집.
    • -l: 설정된 목록 출력.
    • -r: 전체 삭제.
  • 시간 설정 규격
    • crontab 시간 규칙은 '분 시 일 월 요일' 순서로 5개의 공백을 구분하여 설정하며, 각 자리에 별표(*)를 넣으면 '매번(모든 값)'을 의미함.
    • 분 시 일 월 요일 명령어 순서로 작성.
    • 0-60/5: 5분마다 실행 의미.

20. crontab 실습 및 관련 파일

  • 설정 예시: 42 1 * * * ls -l > ~hapi/study/cron.out (매일 새벽 1시 42분 실행).
  • 파일 위치: /var/spool/cron/crontabs/[계정명]에 개별 저장.
  • 로그 활성화: 우분투 기본 비활성 상태. 로그 확인 필요 시 rsyslog 설정 변경 및 재시작 필요.
  • 비교: crontab(Linux) vs cronjob(Kubernetes) vs airflow(Python 기반 워크플로우 도구).

 매일 아침 9시에 "오늘 하루도 화이팅!" 이라고 출력하기

echo "0 0 * * * echo '오늘 하루도 화이팅' | wall" | crontab -

 

728x90
반응형

'BASIC > LINUX' 카테고리의 다른 글

[LINUX] 부팅 시스템  (0) 2026.01.09
[LINUX] 소프트웨어  (0) 2026.01.09
[LINUX] FILE SYSTEM  (0) 2026.01.08
Shell  (0) 2026.01.07
Vim 편집기 및 단축키  (1) 2026.01.06