pid, tty, time, cmd 등의 현재 실행되고 있는 프로세스 정보를 확인할 수 있다.
ps 명령어는 grep이라는 명령어와 같이 쓰인다. 특정 문자열을 가진 파일들을 찾을 때 사용.
ps ax | grep httpd는 httpd 프로세스들에 대한 정보만 확인할 때 두 가지 명령어를 같이 혼용해서 사용할 수 있다. 가장 일반적인 형태이다.
a: 실행중인 모든 프로세스
x: 접속된 터미널 뿐만 아니라 사용되고 있는 모든 프로세스들을 검사
u: 프로세스를 실행하는 사용자 이름과 프로세스 시작 시간도 같이 출력해서 확인 가능
ps aux: 어떤 프로세스를 누가 어느시간동안 사용하고 있는지 확인 가능, status 현재 프로세스 상태를 확인할 수 있다.
status에는 s, d, t 등이 있는데 z는 좀비 프로세스, kill 시그널을 받아도 종료되지 않는 상태, 메모리 정보는 다 사라졌지만 부모 프로세스가 아직 해당 프로세스의 작업 종료를 못할 경우 나타난다.
NICE
프로세스의 실행 우선순위를 설정할 때 사용하는 명령어
프로세스의 우선순위가 높다라고 이야기 하는 것은
빨리 처리되어야 하기 때문에 낮은 프로세스가 할당 받은 자원들을 실행순서가 높은 프로세스들에게 할당을 하게 된다.
프로세스의 우선순위가 높은 프로세스는 자원 할당에서 우선 순위를 할당받게 되고 실행속도가 빨라지게 된다.
pstree
실행중인 프로세스들을 트리구조로 나타내는 것을 이야기한다.
캡처된 화면을 보면 init 프로세스를 최상위로 배치하고
그것을 기반으로 현재 실행중인 프로세스들의 상태를 트리 형태로 나타내는 것을 확인할 수 있다.
p: pid도 같이 명시됨
n: pid를 기반으로 정렬되서 트리가 나온다.
jobs
현재 중지된 작업 상태나 백그라운드로 실행중인 프로세스나 아직 변경되진 않았지만 보고되지 않은 job 프로세스들을 확인할 때 사용하는 명령어
job이라는 명령어로 입력을 하면 현재 실행중인 프로세스를 확인할 수 있고, 프로세스 앞에 +나 -로 명시할 수 있다.
+는 현재 실행중인 작업, -는 아직 실행되지 않고 대기 상태에 있는 job들을 표시
bg와 fg
bg는 포그라운드에서 백그라운드로 작업 전환시 사용하는 명령어
fg는 백그라운드에서 포그라운드로 작업 전환할 때 보통 사용
명령어 bg를 사용하는 이유 중 하나는 작업이 빨리 끝날 것을 생각하고 있겠지만 실행하는 시간이 오래걸려서 시스템을 포그라운드로 처리하면 작업 지연이 유발할 경우 백그라운드로 전환시켜서 작업을 지속적으로 처리하고자 할 때 보통 포그라운드 작업을 백그라운드 작업으로 전환해서 작업을 진행
포그라운드에서 백그라운드로 작업 전환을 할 때는 ctrl + z 를 눌러서 작업을 일시중지시키고 난 다음에 명령어 bg를 주어서 실행
곧바로 백그라운드 작업으로 실행시키고자 한다면 프로세스명 뒤에 and 연산자 같은 기호를 붙여서 백그라운드 작업으로 전환할 수 있음
fg는 백그라운드에서 포그라운드로 작업 전환시 사용하는 명령어
특별하게 작업 번호를 붙이지 않으면 현재 수행중인 작업을 포그라운드로 작업하고 만약에 포그라운드 작업을 종료하려면 ctrl+c를 눌러서 작업을 종료할 수 있다.
kill
지금 운영중인 프로세스를 종료시킬 때 사용
PID 또는 %작업번호를 입력하면 해당 프로세스나 job은 다음 작업 종료가 된다.
만약에 시그널 번호나 시그널 이름을 주게 될 경우 즉 특정 이벤트가 발생하면 자동으로 프로세스를 종료도 할 수 있다.
만약에 ctrl + c를 눌렀을 때 해당 프로세스는 중지해라. 이렇게 조건을 주어서 프로세스를 종료할 때 시그널 번호를 사용할 수도 있다.
-l: 시그널 옵션 확인
killall
같은 종류의 프로세스를 다수개를 한번에 종료시킬 때 사용
해당 프로세스명과 연관된 프로세스를 동시에 종료시킬 때 사용할 수 있다.
nice
프로세스들 사이의 우선순위를 설정할 때 혹은 우선순위 값을 확인할 때 사용할 수 있는 명령어
NI 값을 조정해서 프로세스의 우선순위를 조절할 수 있다.
NI 값의 범위는 -20~-19 까지이다.
숫자가 작을 수록 우선순위 값이 높다. 커질 수록 해당 프로세스는 낮은 우선권을 갖게된다.
낮은 우선권을 가진 프로세스는 높은 우선권을 가진 프로세스에게 자원을 먼저 할당해줌으로써 작업처리 지연이 발생할 수 있다.
일반적으로 우선순위 값은 0을 갖기는 하지만 NI 값이 작을 수록 우선순위가 높다고 볼 수 있다.
특별하게 옵션을 지정하지 않고 nice를 특정 프로세스에게 지정을 하면 우선권은 10씩 증가해서 우선권이 낮아진다.
일반 사용자는 nice 값을 이용해서 프로세스의 NI 값을 조정할 수 없고, root 사용자만이 NICE 값을 이용해서 NICE 값을 감소키셔서 우선순위를 높일 수 있다.
nice -10 bash는 bash 프로세스 NI값을 10만큼 증가시키는 것이다.
nice --10 bash는 NI 값을 -10만큼 감소시켜 우선순위를 높인다.
renice
이미 실행중인 프로세스의 우선순위를 변경하고자 할 때 사용하는 명령어.
root 권한자가 이를 실행할 수 있다.
nice 명령어와 차이점.
nice는 기존 NI 값을 기준으로 증가시키거나 감소시키지만
renice는 지정한 NI값을 설정한다.
renice는 양수값에 -를 사용하지 않는다.
renice에 하이픈을 쓰면 NI 값을 음수값으로 지정하는 것이다.
renice -20 3241: 프로세스 3241의 NI값을 -20으로 셋팅한다.
top
리눅스 시스템의 운영 상태를 실시간으로 모니터링하거나 프로세스 상태를 확인할 수 있다.
top 프로세스들 식별자 번호, 프로세스 소유자, 우선순위 NICE 값, 가상 메모리 총량, 메모리 사용량, 공유 메모리 총량, 해당 프로세스 상태, 프로세스의 CPU 사용량, 프로세스의 메모리 사용률, CPU 사용시간 같은 다양한 상태 정보들을 확인할 수 있다.
기본적으로 5초에 1번씩 실시간으로시스템 상태 정보가 갱신이 되기 때문에 실시간 모니터링이 된다.
nohup
프로세스가 중단되지 않고, 백그라운드로 작업을 수행할 때 일반적으로 사용한다.
사용자가 로그아웃하거나 터미널 창이 닫혀도 실행중인 프로세스를 계속 백그라운드 프로세스로 작업할 수 있도록 도와준다.
용량이 큰 데이터 압축파일의 경우 포그라운드로 작업이 계속 진행이되면은 너무 오랜시간이 걸릴 경 nohup을 이용해서 중단없이 백그라운드로 작업을 전향한 후에 해당 업무를 지속적으로 처리한 후에 업무를 완료할 수 있게 해준다.
백그라운드로 실행될 수 있도록 명령행 뒤에 '&'을 명시한다.
tail
파일의 마지막 행을 기준으로 해서 지정한 행까지 파일 내용을 출력하는 명령어
10줄씩 출력
& 끝에서 읽어올 파일의 라인수를 지정
tail -n5: 파일의 마지막 행부터 5번째까지 파일 내용을 확인할 수 있다.
cron
작업을 하다보면 지정된 시간에 주기적으로 처리해야될 프로세스들이 있다.
주기적으로 반복되는 일들을 설정 시에 cron을 사용해서 작업을 지속적으로 주기적으로 처리
cron 관련 서비스는 cron daemon은 crond라는 명령어로 실행할 수 있고 관련된 설정 파일은 /etc/crontab이라고 하는데 cron 관련 설정을 할 수 있다.
일반적으로 시간과 분 데이 먼쓰 주 이런 식으로 분단위로 최소한 분까지 작업 시간 영역을 지정해서 주기적인 작업을 등록할 수 있다.
포그라운드 프로세스 화면에서 실행되는 것이 보이는 프로세스 (워드 프로세스, 계산기 등 어플리케이션)
백그라운드 프로세스는 화면에서 실행되는 것이 보이지 않는 뒤에서 시스템을 운영하기 위해서 일반적으로 돌아가는 프로세스 (네트워크이나 밑단에서 돌아가고 있는 프로그램들)
포그라운드는 사용자와 상호작용하는 프로세스
터미널에 직접 연결해서 입출력을 주고 받는 프로세스
백그라운드 프로세스는 사용자와 직접 대화하지 않고 뒤에서 실행되는 프로세스
사용자의 입력과 무관하게 실행되는 프로세스
fork() 함수
사용자가 새로운 프로세스를 생성하기 위해서 사용하는 시스템 호출 함수
새로운 프로세스를 생성할 때 기존 프로세스를 복제하는 방식을 사용
원본 프로세스는 그대로 있고 새로운 프로세스가 또 하나 만들어진다.
새로운 프로세스를 위한 메모리를 할당을 하고 작업이 진행이 된다.
원본 프로세스를 부모 프로세스라고 하고 새로 복제된 프로세스를 자식 프로세스라기 이야기 한다.
메모리도 다르지만 소스 코드는 동일하다.
exec() 함수
호출하는 프로세스가 새로운 프로세스로 변경되는 방식
기존 프로세스는 사라지고 새로운 프로세스가 생성되는 방식으로 프로세스를 만든다
기존 프로세스의 메모리를 그대로 새로운 프로세스가 할당받아 사용하는 개념
덮어 씌우는 개념
새로운 프로세스를 위해서 메모리를 할당한다고 하지는 않는다.
데몬(Daemon)
시스템을 부팅하면 자동적으로 실행되는 백그라운드적 프로세스
메모리에 상주하면서 사용자의 요청을 즉각 즉각 처리해주는 서버 프로세스
일반 사용자들은 이 프로세스에 대한 권한이 없고
root 권한을 가진 사용자만이 데몬을 실행하거나 정지시킬 수 있다.
- standalone daemon: 독립적으로 운영되는 데몬, 누군가에 의해서 실행되는 것이 아니라 해당 프로그램이 항상 메모리에 상주하면서 점유율이 높은 경우에 독립적으로 구동이 되서 실행되는 데몬들. HTTPD 등이 대표적인 standalone daemon
- inetd daemon: 슈퍼데몬, 가장 메인이 되는 데몬, 해당 데몬을 실행함으로써 그 밑에 여러가지 종속되어 있는 서비스들을 동시에 구동이 가능. 하나의 데몬을 실행을 시키면 그와 관련된 의존적인 데몬들을 동시에 실행. Telnet, FTP 등은 Super daemon이 구동이 되어야 실행이 될 수 있는 데몬들.