cmod.ify
[LINUX] 프로세스 본문
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] (작업 번호): 프로세스 번호(PID)와 별개로 부여되는 작업의 고유 번호.
- 작업 상태:
- Running: 현재 실행 중인 상태.
- Stopped: Ctrl + Z 등을 눌러 실행이 일시 중지된 상태.
- Done: 작업이 정상적으로 완료된 상태.
- Terminated: 강제로 종료된 상태.
- 작업 내용: 실행 중인 명령어 정보.
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 (계정명을 한 줄에 하나씩 입력).
- 우선순위
- at.allow 존재 시: 여기에 기록된 사용자만 가능 (at.deny 무시).
- at.allow 부재 시: at.deny에 기록된 사용자 제외 모두 가능.
- 둘 다 부재 시: 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 |