ps는 현재 프로세스의 목록 및 상태를 확인하는 명령어이다.
ps는 단독으로 사용하기보다는 옵션, 특히 "-ef"라는 옵션을 붙여 활용하며, 서버 측에서 실행되고 있는 프로세스가 많을 것이기 때문에 grep을 활용하여 프로세스 리스트 중 원하는 프로세스를 찾는 방식으로 많이 활용한다.
ps [Option]
-a, -u, -x와 -e, -f 사이를 띄어놓은 이유가 있는데 ps 명령어는 주로 "ps -aux"나 "ps -ef" 2개 중 1가지 방법으로 활용하기 때문이다. 사실 ps -aux도 거의 안 쓰이고 ps를 사용한다면 대부분 ps -ef로 사용한다.
ps -ef만 입력했을 때 내용이 너무 많아 보기 편하게 하기 위하여 "grep /usr/bin"을 통해 /usr/bin을 포함하고 있는 프로세스들만 출력했다.
명령어 kill은 프로세스를 강제로 종료하기 위해 사용되는 명령어이다.
"kill -l" 명령어를 통해 프로세스 시그널 종류를 출력할 수 있는데 한 번 확인해 보자.
위 시그널을 이해하기 위해선 kill의 사용법에 대해 먼저 알아야 한다.
kill -[시그널 번호] [PID]
위 사진에서 나타난 1부터 64까지의 시그널 번호는 kill 이후 옵션으로 줄 수 있는 값들을 의미하는 것이다.
조금 더 깊이 들어가 보자면 사실 kill 명령어는 프로세스를 강제로 종료하는 명령어가 아니다.
리눅스에서는 kill 명령어를 통해 프로세스를 지정한 뒤 신호(Signal)를 보내 제어할 수 있다.
이때 지정한 프로세스에 보내는 신호는 시그널 번호를 통해 지정할 수 있으며 시그널 번호에 따라 kill 명령어에 대한 프로세스 처리 방법 또한 달라짐을 유추할 수 있다.
추가적으로 만약 "kill -9" 명령어를 사용하고 싶다면 사실 "kill -SIGKILL"으로 시그널 번호가 아닌 시그널 정보를 직접 입력해 줘도 된다. 단지 이는 매우 불편하므로 시그널 번호를 입력하는 것이 거의 규격화된 것이다.
대표적인 시그널은 아래와 같다. 하지만 굳이 외울 필요는 없고, 시그널 번호 9(SIGKILL)에 대해서만 잘 외워두자.
만약 특정 프로세스를 종료하고 싶을 경우 아래와 같이 명령어를 입력하면 될 것이다.
kill -9 [프로세스 PID]
서비스란 시스템과는 독자적으로 구동되어 제공하는 프로세스를 말한다.
즉, 처음 Linux를 구동시켰을 때는 없지만 설정이나 프로그램을 통하여 추가적으로 실행될 수 있는 프로세스를 말한다.
서비스는 대표적으로 웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 등이 존재한다.
서비스들은 ".service"라는 확장자명을 가졌으며 "/usr/lib/systemd/system" 디렉터리에 위치하고 있다.
가장 유명한 서비스는 아마 "httpd.service"가 아닐까 싶은데, HTTP Protocol을 지원하는 Daemon으로 HTML 파일을 전송할 수 있게 해주는 프로세스이다.
만약 httpd.service가 없다면 HTTP Protocol을 통해 클라이언트에게 HTML 파일을 보내줄 수 없으므로 웹 서버의 역할을 수행하지 못할 것이다. 따라서 리눅스를 웹 서버로 사용하기 위해선 무조건 httpd.service가 존재하고 실행되고 있어야 할 것이다.
서비스를 실행/종료/재시작시키는 방법은 아래와 같다.
# 서비스 시작
systemctl start [서비스이름]
# 서비스 종료
systemctl stop [서비스이름]
# 서비스 재시작
systemctl restart [서비스이름]
네트워크에 대해 공부했다면 소켓에 대해서도 이미 알고 있을 것이다.
리눅스에는 접속 대기 상태의 소켓이 이미 존재하고 있으며 항상 외부에서 커넥션 생성 요청이 오기를 기다리고 있을 것이다.
이 상태에서 외부에서 소켓에 서비스를 요청할 경우 systemd가 소켓을 구동한다.
네트워크에 빗대어 생각해 보자면 systemd가 접속 대기 상태의 소켓을 복사하여 새로운 소켓을 만든 뒤 커넥션을 생성하는 것이다.
이후 외부에서 요청이 끝나면 소켓도 종료될 텐데, 네트워크에 대해 공부했다면 알 수 있듯 접속 대기 상태의 소켓은 그대로 남아 있고 복사되어 외부 요청을 처리한 소켓이 종료되는 것이다.
소켓은 ".socket" 확장자명을 가지고 있으며 "/usr/lib/systemd/system" 디렉터리에 저장되어 있다.
jobs
fg %n
백그라운드 프로세스를 포그라운드로 가지고 와 프로세스가 끝날 때까지 프로세스 수행 내용을 출력시키는 것이다.
bg %n
프로세스 목록 중 CPU 사용률이 높은 것부터 차례로 출력하는 명령어로 일정 시간마다 목록이 업데이트된다.
Table 외에도 위의 Tasks, %CPU, MiB Mem, MiB Swap을 통해 실행 중인 프로세스 개수, CPU 사용 현황, 메모리 현황 및 스왑메모리 현황을 파악할 수 있다.