프로세스(Process)란 작업 중인 프로그램을 운영체제가 관리하는 기본 단위로 프로그램이 실행되면 프로세스가 생성됩니다. 이번 포스팅에서는 이러한 프로세스에 관련된 명령어들에 대해 알아보겠습니다.
Ps
ps 명령어는 현재 실행중인 프로세스의 목록을 확인하는 명령어로 프로세스 모니터링을 위해 사용됩니다. ps 명령어를 입력하면 프로세스의 항목 4가지가 나타나는데, 의미하는 바는 다음과 같습니다.
항목 | 의미 |
PID | 프로세스 번호 |
TTY | 프로세스가 실행된 터미널의 종류와 번호 |
TIME | 프로세스 실행 시간 |
CMD | 실행되고 있는 프로그램의 이름(명령) |
ps 명령어에 옵션을 붙여 사용할 수도 있는데 옵션은 다음과 같습니다. (빨간 글씨로 표시된 것은 UNIX 계열, 나머지는 BSD 계열 옵션입니다)
옵션 | 의미 |
a | 터미널에서 실행한 프로세스 출력 |
u | 프로세스 소유자 기준으로 소유자의 상세정보 출력 |
x | 시스템에서 실행(터미널 종속x)되는 프로세스 출력 |
-a | 세션리더/터미널 제외 모든 프로세스 출력 |
-e,-A | 모든 프로세스를 출력(실행중인) |
-f | 프로세스 자세한 정보 출력 |
-u uid | 유저 이름으로 프로세스 정보 출력 |
-p pid | pid가 일치하는 프로세스를 출력 |
위의 표에서 -f 옵션을 이용했을 대 프로세스에 대한 자세한 정보가 나오게 되는데, 표시되는 항목은 다음과 같습니다.
항목 | 의미 |
UID | 프로세스를 실행한 사용자 ID |
PPID | 부모 프로세스 번호 |
C | CPU 사용량(%) |
STIME | 프로세스의 시작 날짜나 시간 |
TTY | 프로세스가 실행된 터미널의 종류와 번호 |
STAT | 프로세스 상태 |
✅ ps 명령어 뿐만 아니라 pstree 라는 명령어도 존재하는데 이는 프로세스를 트리형식으로 구조화하여 보여주는 명령어입니다
다음은 ps 명령어를 이용한 예시입니다.
// 먼저 모든 프로세스의(-e) 자세한정보(안에 PPID있음)출력
// 그중에서 process name이 일치하는 것을 찾음
ps -ef | grep [proc name]
Top
Top 명령어는 실시간으로CPU 및 메모리 사용률, 시스템 평균 부하 등의 시스템 상태를 모니터링하는 명령어입니다. ps명령어는 다르게 실시간으로 보여지는 것이 특징이며, 옵션없이 top 명령만 입력시 3초 주기로 업데이트 됩니다.
- ps : 일정 시점에서 프로세스의 CPU 사용량을 나타냄
- top : 일정 주기로 계산하여 CPU의 사용량을 나타냄.
top 명령어를 입력했을 때 나타나는 옵션은 다음과 같습니다.
항목 | 의미 |
USER | 사용자명 |
PID | 프로세스 ID |
%CPU | CPU 점유율 |
%MEM | 물리 메모리 점유율 |
NI | nice 값 |
VIRT | 사용중인 가상 메모리(KB) |
RES | 사용중인 실제 메모리(KB) |
SHR | 공유 메모리 크기(KB) |
S | 프로세스 상태 |
TIME+ | 프로세스가 시작한 이후 사용한 CPU 시간 총계 |
COMMAND | 실행한 명령어 |
top 명령어를 실행 후 내부에서도 옵션을 사용할 수 있는데 옵션은 다음과 같습니다.
명령어 의미
옵션 | 의미 |
shift+p | cpu 사용률 내림차순 |
shift+m | 메모리 사용률 내림차순 |
shift+n | PID 기준 내림차순 |
shift+t | proc 실행시간 순 내림차순 |
shift+r | 오름차순/내림차순 |
Nohup
일반적으로 리눅스에서는 명령어 뒤에 &를 붙여 백그라운드로 실행시켜 작업을 수행합니다. 그러나 &만 사용하게 될 경우 터미널이 켜져있는 경우에는 백그라운드에서 정상적으로 작동하나 터미널 세션이 끊길 경우 백그라운드에서 수행중이던 작업도 함께 종료됩니다. 우리는 이 상황에서 nohup을 이용하여 세션이 끊기거나 종료되더라도 프로세스를 계속 실행시킬 수 있습니다.
다음은 nohup을 사용한 예시입니다.
// 프로세스 A B 가 있는 경우 둘다 백그라운드 실행
// A가 성공적으로 실행되면 B 실행
nohup A & B &
//nohup.out에 출력안하려면 null 장치 이용
nohup A & > /dev/null
// 정상 동작하는지 확인
jobs
✅ /dev/null 은 null 장치이며, 쓰여진 모든 값들을 버리지만 OS에는 작업에 성공했다고 보고하는 파일입니다.
Kill
kill 명령어는 특정 프로세스에 시그널을 전달하기 위해 사용하는 명령어 입니다. kill 명령어에는 다양한 옵션이 존재하지만 여기서는 프로세스 종료를 위한 2가지 옵션만 다루겠습니다.
- SIGKILL(-9) : 프로세스를 강제로 종료하는 옵션입니다.
- SIGTERM(-15) : 프로세스를 정상적으로 종료하는 옵션입니다.
kill 명령어는 다음과 같이 사용할 수 있습니다.
kill -시그널번호(시그널명) %작업번호
kill -시그널번호(시그널명) PID
다음은 kill 명령어를 사용한 예제입니다.
//실행중인 프로세스 찾아 강제 종료시키는 예제
ps -ef | grep [proc name]
kill -9 PID
'BackEnd > Linux' 카테고리의 다른 글
[Linux] Ubuntu Postman 설치 (0) | 2022.02.20 |
---|---|
[Linux] Linux 디렉토리 구조 (0) | 2022.02.09 |
[Linux] Ubuntu에 MySQL 설치 (0) | 2022.01.07 |
[Linux] 로그 파일 관리_Logrotate (0) | 2022.01.05 |
댓글