프로세스
- 현재 시스템에서 실행 중인 프로그램
- 필요에 따라 부모 프로세스는 자식 프로세스를 생성하고, 자식 프로세스는 또 다른 자식 프로세스 생성 가능
- 부팅할 때 스케줄러가 실행한 프로세스인 systemd와 kthreadd 프로세스를 제외하면 모든 프로세스는 부모 프로세스를 가지고 있음
- 자식 프로세스는 할 일이 끝나면 부모 프로세스에 결과를 돌려주고 종료
- PID: 각 프로세스가 가지고 있는 고유한 번호
프로세스의 종류
- 데몬 프로세스
- 특정 서비스를 제공하기 위해 존재하며 리눅스 커널에 의해 실행
- 고아 프로세스
- 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료된 Orphan Process
- 1번 프로세스(systemd)가 고아 프로세스의 새로운 부모 프로세스가 되어 고아 프로세스의 작업 종료 지원
- 좀비 프로세스
- 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아있는 경우
- 프로세스 목록에 Defunct 프로세스라고 나오기도 함
- 좀비 프로세스가 증가되면 프로세스 테이블의 용량이 부족해서 일반 프로세스가 실행되지 않을 수도 있음
프로세스 정보 출력
- ps: 현재 실행 중인 프로세스의 목록을 출력하는 명령어
- 유닉스 옵션
- -e: 시스템에서 실행 중인 모든 프로세스 정보 출력
- -f: 프로세스의 자세한 정보 출력
- -u uid: 특정 사용자에 대한 모든 프로세스 정보 출력
- -p pid: pid로 지정한 특정 프로세스의 정보 출력
- BSD 옵션
- a: 터미널에서 실행한 프로세스 정보 출력
- u: 프로세스 소유자 이름, CPU 사용량, 메모리 사용량 등 상세 정보 출력
- x: 시스템에서 실행 중인 모든 프로세스 정보 출력
- GNU 옵션
- --pid PID 목록: 목록으로 지정한 특정 PID의 정보 출력
프로세스 정보 검색
- pgrep: 지정한 패턴과 일치하는 프로세스의 정보 출력
- 옵션
- -x: 패턴과 정확히 일치하는 프로세스의 정보 출력
- -n: 패턴을 포함하고 있는 가장 최근 프로세스의 정보 출력
- -u 사용자명: 특정 사용자에 대한 모든 프로세스 출력
- -l: PID와 프로세스 이름 출력
- -t term: 특정 터미널과 관련된 프로세스의 정보 출력
프로세스 종료 및 관리
- 시그널: 프로세스에 무언가 발생했음을 알리는 메시지
- kill -l: 리눅스에서 지원하는 시그널 목록을 출력하는 명령어
- kill [-시그널] PID: 지정한 시그널을 프로세스로 보내는 명령어
- 시그널 2: 인터럽트 시그널
- 시그널 9: 프로세스 강제 종료
- 시그널 15: 프로세스와 관련된 파일을 정리한 후 종료하나 종료되지 않는 프로세스가 있을 수 있음
- pkill: PID가 아닌 프로세스의 명령 이름으로 프로세스를 찾아 종료시키는 명령어
- top: 현재 실행 중인 프로세스에 대한 정보를 주기적으로 출력하는 명령어
프로세스 및 작업 제어
- 포그라운드 프로세스: 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다려야 하는 포그라운드 방식으로 처리되는 프로세스
- 백그라운드 프로세스: 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속할 수 있음
- jobs: 작업 목록을 출력하는 명령어
- sleep 80 &: 백그라운드로 실행되는 작업
- 작업 전환 명령
- Ctrl+z 또는 stop %작업번호: 포그라운드 작업 중지 (종료 X)
- bg %작업번호: 작업 번호가 지시하는 작업을 백그라운드 작업으로 전환
- fg %작업번호: 작업 번호가 지시하는 작업을 포그라운드 작업으로 전환
- Ctrl+c: 작업 종료
- 포그라운드 작업은 대부분 종료
- 백그라운드 작업은 kill 명령으로 강제 종료, PID 또는 %작업번호 사용
- nohup 명령&: 로그아웃한 다음에도 작업이 완료될 때까지 백그라운드 작업을 실행시키는 명령어
작업 예약
at
- at [옵션] [시간]: 예약한 명령을 정해진 시간에 실행하는 명령어
- -l: 현재 실행 대기 중인 명령의 전체 목록을 출력하는 옵션(atq 명령과 동일)
- -r 작업번호: 현재 실행 대기 중인 명령 중 해당 작업 번호를 삭제하는 옵션(atrm과 동일)
- -m: 출력 결과가 없더라도 작업이 완료되면 사용자에게 메일로 알려줌
- -f 파일: 표준 입력 대신 실행할 명령을 파일로 지정하는 옵션
- at로 생성된 작업 파일은 /var/spool/at 디렉터리에 저장, root 사용자만 디렉터리 내용 확인 가능
- at -l 또는 atq 명령으로 at 작업 목록 확인 가능
- at -d 또는 atrm 명령으로 at 작업 삭제
- at 명령 사용 제한
- /etc/at.allow 파일이 있는 경우: 지정된 사용자만 at 명령 사용 가능, deny 파일 무시
- /etc/at.deny 파일이 있는 경우: 지정된 사용자를 제외한 모든 사용자가 at 명령 사용 가능
- 두 파일 모두 없는 경우: root 사용자만 at 명령 사용 가능
crontab
- crontab [-u 사용자ID] [옵션] [파일명]: 정해진 시간에 반복 실행
- -e: 사용자의 crontab 파일을 편집하는 옵션
- -l: crontab 파일의 목록을 출력하는 옵션
- -r: crontab 파일을 삭제하는 옵션
- 파일 형식: 분/시/일/월/요일/작업내용
- crontab 명령 사용 제한
- /etc/cron.allow 파일이 있는 경우: 지정된 사용자만 crontab 명령 사용 가능
- /etc/cron.deny 파일이 있는 경우: 지정된 사용자를 제외한 모든 사용자가 crontab 명령 사용 가능
- 두 파일 모두 없는 경우: 시스템 관리자만 crontab 명령 사용 가능
- cron.deny 파일은 기본적으로 있지만 cron.allow 파일은 관리자가 만들어야 함