- 프로세스(process)란? 실행중인 프로그램이다.
프로세스는 프로그램이 메모리에 적재되어 실제로 실행되고 있는 상태를 말한다. 프로세스는 컴퓨터 내에서 실행중인 프로그램의 인스턴스이다. 여러 명의 사용자들에 의해 공유되고 있는 응용프로그램은 일반적으로 각 사용자들의 실행단계에서 하나의 프로세스를 갖는다. 프로세스는 자프로세스라고도 불리는 서브프로세스를 시작시킬 수 있다. 자프로세스는 부프로세스의 복제로서 부프로세스의 자원을 일부 공유하는데, 부프로세스가 종료되면 더 이상 존재할 수 없다. 프로세스들은 몇 가지 IPC 방식을 통하여 정보를 교환하거나 그들의 연산을 동기화할 수 있다.
- 프로세스의 정보 ( Process Informaiton )
/proc 라는 디렉토리에 각 프로세스에 해당되는 PID 디렉토리들이 있다.
/proc 라는 디렉토리는 커널 메모리를 마운트 한 것이다.
PID : Process
ID PPID : Parent Process ID
- 프로세스 실행
(fg) # ls
(bg) # ls &
[참고]백그라운드로 실행해야 하는 프로세스
GUI 환경의 프로그램들 ( 사용 시간이 오래 걸리는 프로그램 )
backup, data gathering ( 보통 30분에서 길게는 1주일 정도 걸리는 프로그램 )
잡 (job) 관리
잡 확인
# jobs
# fg %1 /* 백그라운드로 실행되는 프로세스를 포그라운드로 전환 %job_num */
# bg %1 /* 반대로 포그라운드 프로세스를 백그라운드로 전환 */
프로세스가 실행중에 CMD를 칠수 없기 때문에 <CTRL + Z > 키를 눌러 프로세스를 잠시 멈추고
bg 로 전환한다.
잡 종료
# kill %1
- 프로세스 확인
# ps
# ps -l /* ps 보다 더 자세한 정보 */
# ps -a /* 사용자 프로세스에 대한 간략한 정보 */
# ps -U <사용자명> /* 특정 사용자가 실행시킨 프로세스 정보 */
# ps -t pts/5 /* 특정 터미널에서 실행시킨 프로세스 정보 */
# ps aux | grep xinetd
# ps -ef | grep xinetd
- 프로세스 종료
# kill PID
# kill PID PID PID
# kill -1 PID /* SIGHUP 프로세스 재시작 */
# kill -2 PID /* SIGINT <CTRL+C> 인터럽트 종료 */
# kill -9 PID /* SIGKILL 강제 종료 */
# kill -15 PID /* SIGTERM 정상 종료 */ 시그널을 붙이지 않는다면 기본값
# man 7 signal /* 이 외의 시그널 정보 확인 */
[좀비 프로세스]
종료가 되어야 하는 파일이 종료 되지 않고 남아있는 파일
강제로 종료 시켜야 한다. < 다음에 더 자세히 다루도록 한다. >
# kill -9 PID
-프로세스 모니터링
#top CMD ( ps 명령어와 달리 top은 실시간 모니터링이 가능하다. )
[명령어 형식]
# top
# top -u oracle
# top -p PID1, PID2...
[정렬 방법]
# top
1) h /* h 키 입력후 원하는 정렬 방식 선택 */
2) P : cpu 사용량이 높은 순으로 정렬
M : mem 사용량이 높은 순으로 정렬
#top
top - 17:46:37 up 2:25, 4 users, load average: 0.03, 0.03, 0.00 Tasks: 136 total, 1 running, 134 sleeping, 0 stopped, 1 zombie Cpu(s): 2.0%us, 1.7%sy, 0.0%ni, 96.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 남은퍼센트 Mem: 1035096k total, 718752k used, 316344k free, 68376k buffers 남은공간 Swap: 522104k total, 0k used, 522104k free, 492140k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4203 root 16 0 84828 16m 11m S 2.7 1.6 0:09.65 gnome-terminal 3624 root 15 0 35972 10m 6360 S 0.7 1.1 0:16.60 Xorg 3813 root 15 0 42812 10m 8520 S 0.2 1.1 0:01.10 vmware-user 1 root 18 0 2072 616 532 S 0.0 0.1 0:01.26 init 2 root RT -5 0 0 0 S 0.0 0.0 0:00.35 migration/0 3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0 5 root RT -5 0 0 0 S 0.0 0.0 0:00.15 migration/1 6 root 36 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1 7 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/1 8 root 10 -5 0 0 0 S 0.0 0.0 0:00.03 events/0 9 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 events/1 10 root 10 -5 0 0 0 S 0.0 0.0 0:00.01 khelper 11 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread 15 root 18 -5 0 0 0 S 0.0 0.0 0:00.03 kblockd/0 16 root 10 -5 0 0 0 S 0.0 0.0 0:00.02 kblockd/1 17 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid 183 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/0 184 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/1 187 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd 189 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kseriod 256 root 16 0 0 0 0 S 0.0 0.0 0:00.00 pdflush 257 root 15 0 0 0 0 S 0.0 0.0 0:00.15 pdflush ..... (중략) ..... |
[모니터링 툴 종류]
GUI) # gnome-system-monitor (TUI) # top
(GUI) # gnome-system-log (TUI) # tail -f /var/log/messages
-lsof CMD ( LiSt Open File )
프로세스에 의해 열려진 파일들에 대한 정보를 볼 수 있다. 특정 파일을 접근하고 있는 프로세스인지 특정 포트로 접속한 사용자를 확인 할 때 유용한 프로세스이다.
[명령어 형식]
# lsof
# lsof /tmp /* 파일 이름 */
# lsof -c sshd /* 데몬 이름 */ /* -c 특정 데몬이 사용하고 잇는 모든 파일의 정보 출력 */
# lsof -i ( # netstat -antup ) /* -i 현재 사용하고 잇는 모든 소켓 상태를 확인 가능 */
-pmap CMD
프로세스가 사용하고 있는 메모리의 주소를 확인 할 수 있다. 응용프로그램이 실행될 때 얼마나 많은 라이브러리가 로드되는가를 확인 할 수 있다.
[명령어 형식]
# pmap PID
-pstree CMD
실행중인 프로세스 상태를 트리 구조로 보여주는 명령어. 프로세스의 부모 자식관계를 형태로 보여주는 명령어
[명령어 형식]
# pstree
# pstree PID
# pstree user01
# pstree -l /* 프로세스의 관계를 길게 출력 */
init-┬─acpid ├─atd ├─auditd─┬─audispd───{audispd} │ └─{auditd} ├─automount───4*[{automount}] ├─avahi-daemon───avahi-daemon ├─bonobo-activati───{bonobo-activati} ├─brcm_iscsiuio───3*[{brcm_iscsiuio}] ├─bt-applet ├─clock-applet ├─crond ├─cupsd ├─2*[dbus-daemon] ├─dbus-launch ├─eggcups ├─escd───{escd} ├─events/0 ├─gam_server ├─gconfd-2 ├─gdm-binary───gdm-binary─┬─Xorg │ └─gnome-session───Xsession' ..... (중략) ..... |
-nice / renice CMD
프로세스를 실행하는데 있어서 프로세스에게 우선권을 부여 할 수 있다. 일반적으로 프로세스들은 설정된 우선권 순위대로 실행이 되는데 nice명령을 사용하게 되면 프로세스의 실행 우선권을 바꿀 수 있다. 우선권 순위는 -20에서 19까지의 범위를 가지며 nice 값이 적을수록 우선순위 값이 높아지게 된다.
nice 명령어 : 프로그램을 실행할 때 프로세스의 우선순위를 설정할 수 있는 명령어
renice 명령어 : 실행중인 프로그램의 우선순위를 조정할 수 있는 명령어
# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 4768 4744 0 75 0 - 644 wait pts/1 00:00:00 bash
[명령어 형식]
# nice -(-20 ~ 19) CMD
# renice (-20 ~ 20) PID
EX : (백업스크립트/데이트 수집 스크립트) -> 오래 걸림 -> cpu 부하량 증가
(X) # /root/bin/backup.sh &
(0) # nice -n 10 /root/bin/backup.sh &
(부하량을 주는 프로그램)
# top
# renice 10 PID (PID : 부하량을 주는 프로그램's PID)
nice / renice 명령어는 우선순위를 낮추는 것에만 사용한다.
oracle / was 는 우선순위를 설정하지 않는다.
'Linux > Linux 기초' 카테고리의 다른 글
리눅스 기초 명령어_1 (0) | 2017.08.27 |
---|---|
원격 접속과 파일 전송 (0) | 2017.08.24 |
쉘(shell)의 특성 (0) | 2017.08.23 |
압축과 아카이브 (0) | 2017.08.22 |
검색 관련 명령어 (0) | 2017.08.22 |