프로세스
- 프로세스: CPU에 의하여 수행되고 있는 프로그램
- 셸: 사용자와의 대화를 위한 프로세스
- ls 등 명령어: 사용자가 사용하는 명령어, 셸에 의하여 프로세스로 새롭게 생성
- a.out아니 사용자 프로그램도 프로세스로 수정
- 프로그램: 하드디스크에 저장되어 있는 수행가능 한 파일
- 때로는 원시코드(C/C++)를 프로그램이라고 부르기도 함
- 시스템 프로그래밍 관점에서 프로그램은 컴피일/링크가 끝난 executiable 파일을 뜻함
Programing, System Call
Signal Sources
프로세스
- 현재 시스템에서 실행 중인 프로그램
- 리눅스는 다중 프로세스 시스템으로 동시에 여러 프로세스 실행
프로세스의 부모-자식 관계
- 리눅스에서 모든 프로세스는 부모-자식 관계
- 부모프로세스가 자식프로세스 생성
프로세스 번호
- 각 프로세스는 고유한 번호를 가짐: PID
- 1번 프로세스는 sysyem, 2번 프로세스는 kthreadd
프로세스의 종류
- 데몬 프로세스: 특정 서비스를 제공하기 위해 존재, 리눅스 커널에 의해 실행
- 고아 프로세스: 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료되면 자식 프로세스는 고아 프로세스가 됨
- 좀비 프로세스
- 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아 있는 경우가 있는데 이러한 자식 프로세스를 좀비 프로세스라고 함
- 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 정상적인 프로세스가 실행되지 않을 수도 있음
프로세스 관리 명령
ps
기능 - 현재 실행 중인 프로세스에 대한 정보 출력
형식 - ps [옵션]
옵션
<유닉스 옵션>
- -e: 시스템에서 실행 중인 모든 프로세스의 정보 출력
- -f: 프로세스 상세 정보 출력
- -u uid: 특정 사용자에 대한 모든 프로세스의 정보 출력
- -p pid: pid로 지정한 특정 프로세스의 정보를 출력
<BSD 옵션>
- a: 터미널에서 실행시킨 프로세스의 정보를 출력
- u: 프로세스 소유자 이름, CPU사용량, 메모리 사용량 등 상세 정보 출력
- x: 시스템에서 실행 중인 모든 프로세스의 정보를 출력
<GNU 옵션>
- --pid PID 목록: 목록으로 지정한 특정 PID 정보를 출력
pgrep
기능 - 지정한 패턴과 일치하는 프로세스의 정보를 출력
형식 pgrep [옵션] [패턴]
옵션
- -x: 패턴과 정확히 일치하는 프로세스의 정보 출력
- -n: 패턴을 포함하고 있는 가장 최근 프로세스의 정보를 출력
- -u 사용자 이름: 특정 사용자에 대한 모든 프로세스 출력
- -l: PID와 프로세스 이름을 출력
- -t term: 특정 단말기와 관련된 프로세스의 정보 출력
시그널
- 프로세스에 무언가 발생했을 알리는 간단한 메시지
- 무엇이 발생했는지를 나타내는, 미리 정의된 상수를 사용
- 시그널은 번호로 구분되면 이름을 가지고 있음
- 시그널을 받은 프로세스는 기본적으로 종료
주요 시그널
시그널 | 번호 | 기본 처리 | 의미 |
SIGHUB | 1 | 종료 | 터미널과 연결 끊겼을 때 발생 |
SIGINT | 2 | 종료 | 인터럽트로 사용자가 Ctrl + c를 입력하면 발생 |
SIGQUIT | 3 | 종료, 코어덤프 | 종료 신호로 사용자가 Ctrl + \을 입력하면 발생 |
SIGKILL | 9 | 종료 | 이 시그널은 받은 프로세스는 무시할 수 없으며 강제로 종료 |
SIGALRM | 14 | 종료 | 알람에 의해 발생 |
SIGTERM | 15 | 종료 | kill 명령이 보내는 기본 시그널 |
kill
기능 - 지정한 시그널을 프로세스에게 보냄
형식 - kill [-시그널] PID...
시그널
- -2: 인터럽트 시그널을 보냄
- -9: 프로세스 강제 종료
- -15: 프로세스와 관련된 파일들을 정리하고 종료, 종료되지 않는 프로세스 존재 가능
pkill
- PID가 아니라 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료
killall
- pkill 명령처럼 프로세스의 명령 이름(CMD)으로 프로세스를 찾아 종료
- 해당 이름으로 실행 중인 모든 프로세스를 한 번에 종료
- 해당 프로세스를 소유하고 있어야 함
top
- 현재 실행 중인 프로세스의 정보를 주기적으로 출력
- 프로세스의 자세한 요약 정보를 상단에 출력, 각 프로세스의 정보를 하단에 출력
프로세스 관리 도구
- GUI
- [프로그램 표시]-[시스템 감시]와 같은 순서로 동작
포그라운드, 백그라운드 프로세스와 작업제어
작업 제어
- 한 터미널에서 동시에 여러 프로세스를 실행하고 관리
- 작업 전환: 포그라운드 작업 <-> 백그라운드 작업 간 전환
- 작업 일시 중지: 작업을 잠시 중단
- 작업 종료: 프로세스 종료처럼 작업 종료
포그라운드 작업
- 사용자가 입력한 명령이 실행되어 결과가 출력될 때까지 기다리는 방식
백그라운드 작업
- 백그라운드 방식으로 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속할 수 있음
- 한 터미널에서 여러 개의 프로세스를 동시에 실행 가능
- 백그라운드 방식으로 처리되는 프로세스를 백그라운드 프로세스라고 함
- 명령을 백그라운드로 실행하려면 명령의 마지막에 & 기호 추가
- 백그라운드로 작업을 실행하면 프롬프트가 바로 나옴
jobs
기능 - 백그라운드 작업을 모두 보여줌, 특정 번호를 지정하면 해당 작업의 정보만 보여줌
형식 - jobs [%작업 번호]
%작업번호
- %번호: 해당 번호의 작업 정보 출력
- %+ 또는 %%: 작업 순서가 +인 작업 정보 출력
- %-: 작업 순서가 -인 작업 정보 출력
작업 전환하기
명령 | 기능 |
Crtl + z 또는 stop %작업 번호 | 포그라운드 작업을 중지 |
bg %작업 번호 | 작업 번호가 지시하는 작업을 백그라운드 작업으로 전환 |
fg %작업 번호 | 작업 번호가 지시하는 작업을 포그라운드 작업으로 전환 |
작업 종료하기
- 포그라운드 작업은 Ctral + c를 입력하면 대부분 종료
- PID를 검색하여 kill 명령으로 강제 종료
로그아웃 후에도 백그라운드 작업 계속 실행하기
- 백그라운드 작업을 실행한 터미널이 종료되거나 사용자가 로그아웃하면 실행 중이던 백그라운드 작업도 함께 종료
nohup
기능 - 로그아웃한 후에도 백그라운드 작업 계속 실행
형식 - nohup 명령&
작업 예약
at
기능 - 예약학 명령을 정해진 시간에 실행
형식 - at [옵션] [시간]
옵션
- -l: 현재 실행 대기 중인 명령의 전체 목록 출력(atq 명령과 동일)
- r 작업 번호: 현재 실행 대기 중인 명령 중 해당 작업 번호를 삭제(atrm과 동일)
- -m: 출력 결과가 없더라도 작업이 완료되면 사용자에게 메일로 알려줌
- -f 파일: 표준 입력 대신 실행할 명령을 파일로 지정
Ctrl + d 입력으로 종료
at명령 설치하기
sudo apt install at
메일 설치
sudo apt install mailutils
at 작업 파일 확인
- at로 생성된 작업 파일은 /var/spool/cron/atfobs 디렉터리에 저장
- 작업 번호로 파일이 생성
- atjobs 디렉터리의 내용은 daemon 그룹의 사용자만 확인할 수 있으므로 sudo 명령을 사용해야 함
sudo ls -l /varspool/cron/atjobs
atq
기능 - 현재 사용자의 등록된 작업 목록 출력, 슈퍼유저일 경우 모든 사용자의 작업 목록 출력
형식 - atq
atrm
기능 - 지정된 작업 번호의 작업을 삭제
형식 - atrm 작업 번호
at 명령 사용 제한하기
/etc/at.allow: at 명령의 사용이 허용된 사용자들 저장, 필요할 때 만들어야 함
/etc/at.dent: at 명령의 사용이 금지된 사용자들 저장, 기본적으로 파일이 있음
정해진 시간에 반복 실행
crontab
기능 - 사용자의 crontab 파일을 관리
형식 - crontab [-u 사용자ID] [옵션] [파일명]
옵션
- -e: 사용자의 crontab 파일의 목록 출력
- -l: crontab 파일의 목록을 출력
- -r: crontab 파일을 삭제
crontab 파일 형식
- crontab 명령으로 관리하는 파일은 사용자별로 생성
- crontab 파일에는 여러 개의 작업을 저장할 수 있으며 한 행에 하나의 작업을 설정
- crontab 파일의 한 행은 다음과 같이 여섯 항목으로 구성
crontab 파일 생성하고 편집하기
crontab -e
편집기로는 기본적으로 VISUAL 또는 EDITOR 환경 변수에 지정된 편집기를 사용
crontab 파일 확인하기
crontab -l
/var/spool/cron/crontabs 디렉터리에 사용자 이름으로 생성
crontab 파일 삭제하기
crontab -r
본인의 작업 삭제
시스템 관리자가 특정 사용자의 crontab을 삭제하려면 삭제하려는 사용자 ID를 지정
crontab 명령 사용 제한하기
/etc/cron.allow 파일이 있으면 이 파일에 지정된 사용자만 명령 사용 가능
/etc/cron.allow 파일이 없고 /etc/cron.deny 파일이 있으면 이 파일에 사용자 계정이 없어야 명령 사용 가능
/etc/cron.allow 파일과 /etc/cron.deny 파일이 모두 없으면 시스템 설정에 따라 시스템 관리자 또는 모든 사용자가 명령 사용 가능
두 파일 모두 존재 시 /etc/cron.allow 파일이 내용이 적용됨
'전공 > 리눅스시스템관리' 카테고리의 다른 글
[Linux] 리눅스 부팅 프로세스 (0) | 2023.06.12 |
---|---|
[Linux] 리눅스 파일시스템과 디스크관리 (1) | 2023.06.12 |
[Linux] 리눅스 파일과 접근 권한 (0) | 2023.04.19 |
[Linux] 리눅스 프롬프트 설정, 환경 설정 파일 (0) | 2023.04.19 |
[Linux] 리눅스 배시셸 환경 설정, 앨리어스, 히스토리 (0) | 2023.04.19 |