프로세스 정보 확인

1. ps 명령어

시스템에서 실행 중인 프로세스에 대한 정보를 출력하는 도구이다. 

 

PID 는 Process ID 이고, PPID 는 부모 프로세스의 PID 이다.

 

/usr/sbin/sedispatch 프로세스는 /sbin/auditd 프로세스에 의해 파생된 것을 확인할 수 있다.

 

1) -f 옵션

full format 으로 출력한다.

 

2) -e 옵션

모든 프로세스를 출력한다.

 

3) -a, -l 옵션

-a 옵션현재 세션 및 터미널과 관련된 프로세스만을 출력하고, -l 옵션은 long format 으로 출력한다.

 

4) u 옵션

프로세스의 소유자 정보 UID 를 함께 출력한다.

 

2. pstree 명령어

프로세스를 트리 형태로 출력한다. -p 옵션은 PID 출력, -n 옵션은 PID 순차적으로 정렬하여 출력한다.

 

3. top 명령어

시스템에서 현재 실행 중인 프로세스에 대한 정보를 실시간으로 제공한다.

 

- PID : 프로세스 ID
- USER : 계정 이름
- PR : priority 우선순위 (기본 값 20)
- NI : nice 값 ( -20 ~ +19 ) 
- VIRT : 프로세스가 점유하고 있는 전체 가상 메모리의 사용량
- RES : 실제 메모리 (Resident Size)
- SHR : 프로세스가 점유하고 있는 공유 메모리의 총합 크기
- S : 프로세스 상태 값 (S[leeping], R[unning], W [swapped out process], Z[ombies])
- %CPU : CPU 점유율
- %MEM : 메모리 점유율
- TIME : 프로세스가 실행된 시간, %CPU 와 유사

- Command : 동작중인 프로세스

 

1) u 단축 명령어

특정 사용자와 연관된 프로세스 정보만을 확인할 수 있다.

 

2) r 단축 명령어

특정 PID 를 가진 프로세스의 nice 값을 변경할 수 있다.

 

nice NI 값이 변화하게 되면 priority PR 값도 변화한다.

 

nice 값의 범위는 -20 ~ 19 이므로 범위를 초과하는 경우, 최대 19 값으로 설정된다. 

 

nice 값의 범위는 -20 ~ 19 이므로 범위를 초과하는 경우 최소 -20 값으로 설정된다. 

 

3) k 단축 명령어

특정 PID 를 가진 프로세스에 signal 을 전송할 수 있다. 기본 값은 TERM 이다.

 

4) m 단축 명령어

메모리 정보를 출력한다.

 

5) l 단축 명령어

평균 부하율 정보를 출력한다.

 

4. pgrep 명령어

프로세스 이름과 매칭되거나 속성을 기반으로 현재 실행 중인 프로세스를 검색한다.

 

 

프로세스 종류

1) foreground 프로세스

선행 프로세스가 종료된 뒤, 다음 프로세스를 실행할 수 있다. ctrl + c 로 종료할 수 있다.

 

선행 프로세스 실행 중, 다른 프로세스의 실행이 불가능한 것을 확인할 수 있다.

 

2) background 프로세스

서비스 데몬이 이에 해당하며, 프로세스 실행 중에 쉘 전환을 하여 다른 프로세스를 실행할 수 있다. ctrl + c 로 종료할 수 없으며, foreground 프로세스로 전환한 후에 종료 가능하다.

 

 

 

프로세스 상태 전환

1) fg 명령어

백그라운드로 동작 중이던 프로세스를 포어그라운드로 실행하는 명령어이다. 백그라운드로 동작하던 프로세스가 ctrl + z 등으로 중지되어있는 경우, 해당 명령어를 통해 재구동할 수 있다. fg or fg %[번호] 형식으로 사용한다.

 

2) bg 명령어

포어그라운드로 동작 중이던 프로세스를 백그라운드로 실행하는 명령어이다. bg or bg %[번호] 형식으로 사용한다.

 

3) jobs 명령어

현재 실행 중인 모든 프로세스의 목록을 출력하는 명령어이다. -l 옵션으로, PID 까지 확인할 수 있다.

 

+ : 가장 최근에 실행된 작업

- : 2번째로 최근에 실행된 작업

 

작업 종료 시에는, kill %[번호] 형식의 명령을 사용한다.

 

 

프로세스 종료

1) kill 명령어

프로세스에게 특정 signal 을 전송한다. 지정하지 않는 경우, 기본 값으로 프로세스 종료 TERM 을 보낸다.

 

2) killall 명령어

지정한 이름에 부합하는 모든 프로세스에게 signal 을 전송한다. 

 

별도의 signal을 지정하지 않는 경우, TERM 을 보낸다.

 

원격 접속 서비스인 sshd 데몬과 관련된 모든 프로세스를 종료해보자.

 

접속 중이던 원격 접속 프로그램의 연결이 끊긴 것을 확인할 수 있다.

 

3) pkill 명령어

프로세스 이름과 지정한 패턴이 부합하는 프로세스만을 종료한다.

 

 

프로세스 상태 전환 예제 -1

[1] ping 127.0.0.1

 

ping 127.0.0.1
ctrl + z
[1] + Stopped ping 127.0.0.1

 

127.0.0.1 로 ping 하는 명령을 foreground 로 실행한 후, ctrl + z 로 일시 정지하였다. 

 

[2] ping 192.168.10.10

 

ping 192.168.10.10
ctrl + z
[1] - Stopped ping 127.0.0.1
[2] + Stopped ping 192.168.10.10

 

192.168.10.10 로 ping 하는 명령을 foreground 로 실행한 후, ctrl + z 로 일시 정지하였다. 앞서 실행되었던 프로세스는 - 로 순위가 밀려난 것을 확인할 수 있다.

 

[3] ping 8.8.8.8

 

ping 8.8.8.8
ctrl + z
[1]   Stopped ping 127.0.0.1
[2] - Stopped ping 192.168.10.10
[3] + Stopped ping 8.8.8.8

 

8.8.8.8 로 ping 하는 명령을 foreground 로 실행한 후, ctrl + z 로 일시 정지하였다.

 

fg 명령어를 사용하게 되면, 가장 최근에 실행되었던 작업이 수행되는 것을 확인할 수 있다.

 

fg %[번호] 로, 작업 번호를 지정하여 해당 번호의 작업을 수행할 수도 있다.

 

kill %[번호] 로, 해당 번호에 해당하는 작업을 종료시킬 수 있다.

 

fg 명령을 통해 최근에 실행된 순서대로 foreground 로 전환되며, ctrl + c 로 종료할 수 있다.

 

 

프로세스 상태 전환 예제 - 2

[1] ping 127.0.0.1

 

127.0.0.1 로 ping 하는 명령을 foreground 로 실행한 후, ctrl + z 로 일시 정지하였다. 

 

[2] ping 192.168.10.10

 

192.168.10.10 로 ping 하는 명령을 background 로 실행한다. 

 

[3] ping 192.168.10.1

 

이번에는 192.168.10.1 로 ping 하는 명령을 background 로 실행한다. 백그라운드로 동작하는 작업이 두 종류가 있어 프롬프트 상에 명령 수행이 섞인 채로 나타나게 된다.

 

백그라운드로 동작하던 3번 작업을 ctrl + z 로 일시 정지하게 되면, 다시 2번 작업의 수행 결과만이 나타나게 된다.

 

bg %[번호] 를 통해, 1번 작업을 백그라운드로 동작시켜 두 개의 작업 결과가 섞여나오는 것을 확인할 수 있다.

 

작업 번호 없이 bg 명령을 사용하면, 우선순위가 가장 높은 작업이 백그라운드로서 실행된다.

 

그 결과, 모든 작업이 한꺼번에 프롬프트 상에 출력되는 것을 확인할 수 있다.

 

kill %[번호] 명령을 통해, 2번 작업을 종료시켰다. 1번과 3번 작업만이 프롬프트로 출력되는 것을 확인할 수 있다.

 

fg 명령으로, 우선순위대로 foreground 프로세스로 전환한 후 ctrl + c 로 작업을 종료한다.

 

 

프로세스 우선순위

1) nice 명령어

새로이 실행되는 프로세스를 대상으로 프로세스의 우선 순위를 의미하는 nice 값을 설정한다. top 명령의 NI 필드로 확인할 수 있다. nice 값은 -20 ~ 19 이며, 기본 값은 0 이다. 값이 낮을 수록 많은 CPU 시간이 할당되고, 높을 수록 짧은 CPU 시간이 할당된다.

 

-[값] 의 형태로 설정하며, --13 인 경우에는 13 만큼 감소, -13 인 경우에는 13 만큼 증가한다는 의미이다.

 

2) renice 명령어

이미 실행 중인 프로세스의 nice 값을 변경할 수 있다. 또한, nice 명령어는 기존의 nice 값을 기준으로 설정하며 renice 명령어는 기존 값과 관계없이 설정한다. renice PID [옵션] 형식을 사용한다.

 

 

3) nohup 명령어

no hangup 의 약자로, 대체로 시스템 로그아웃 시에는 관련 모든 프로세스가 자동 종료된다. 로그아웃한 세션과 연관된 모든 프로세스들에게 SIGHUP 시그널을 전송하기 때문이다. 단, 해당 명령을 사용하면 세션 로그아웃 시에도 프로세스가 계속 가동된다.

 

명령 수행의 결과는 nohup.out 이라는 이름의 파일로 저장된다.

 

또한, 로그아웃을 해도 계속 명령이 수행되는 것을 확인할 수 있다.

 

 

 

 

 

공부하면서 정리한 내용을 글로 작성하였습니다.

혹시나 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다. :)

COMMENT