4장. 서버를 구축하는 데 알아야 할 필수 개념과 명령 (14) - 파이프, 프로세스, 서비스

728x90
반응형

출처 : https://www.youtube.com/watch?v=yeiQ5sSjodU&list=PLVsNizTWUw7FqN2gq79Cb3R6qkS7mqOJk&index=26

 

 

파이프, 필터, 리디렉션

 

파이프 (Pipe)

  • 2개의 프로그램을 연결하는 통로
  • 명령에 '|' 를 추가해 파이프를 표현한다.
ls -l /etc | more -> ls -l /etc를 입력하면 파일이 너무 많이 출력되어 한 페이지에 
		     모두 담을 수 없으므로 페이지를 나눠서 보겠다는 의미

 

 

필터 (Filter)

  • 필요한 것만 걸러주는 기능
  • grep, tail, wc, sort, awk, sed 등
  • 주로 파이프와 같이 사용
ps -ef | grep bash -> ps -ef 명령을 입력하면 모든 프로세스 번호를 출력하므로 
		      bash라는 글자가 들어간 프로세스만 출력

rpm -qa | grep dnf -> 설치된 패키지 중에서 dnf라는 글자가 들어간 패키지를 출력. 
		      그냥 rpm -qa dnf 명령을 실행하면 dnf-data 등은 출력되지 않음

 

 

리디렉션 (Redirection)

  • 표준 입출력의 방향을 바꾸는 기능
  • 입출력을 파일로 처리하고 싶을 때 주로 사용
ls -l > list.txt -> ls -l 명령의 결과를 화면에 출력하지 않고 list.txt 파일에 저장.
		    만약 list.txt 파일이 기존에 있으면 덮어 씀(overwrite)
            
ls -l >> list.txt -> 위와 동일. 단 list.txt 파일이 기존에 있으면 기존의 내용에 이어서 씀(append)

sort < list.txt -> list.txt 파일을 정렬해서 화면에 출력
sort < list.txt > out.ktxt -> list.txt 파일을 정렬해서 out.txt 파일에 씀

 

 

 

프로세스, 데몬(서비스)

 

프로세스

  • 프로세스란 하드디스크에 저장된 프로그램이 메모리에 적재되어 활성화 된 것. 자세한 내용은 운영체제 항목 참조

 

포그라운드 프로세스 (Foreground Process)

  • 실행하면 화면에 나타나서 사용자와 상호작용을 하는 프로세스
  • 대부분의 응용프로그램

 

백그라운드 프로세스 (Background Process)

  • 실행은 되었지만, 화면에는 나타나지 않고 실행되는 프로세스
  • 백신 프로그램, 서버 데몬 등

 

프로세스 번호

  • 각 프로세스에 할당된 고유 번호
  • 메모리에서 활성화된 특정 프로세스를 찾고 강제로 제거하기 위해 사용함

 

작업 번호

  • 현재 실행되고 있는 백그라운드 프로세스의 순차번호

 

부모 프로세스와 자식 프로세스

  • 모든 프로세스는 부모 프로세스를 가지고 있다.
  • 부모 프로세스를 kill 하면, 자식 프로세스도 자동으로 kill 된다.
    • X Window 환경에서 Firefox를 실행하면, X window가 Firefox의 부모 프로세스가 되고 Firefox는 X window의 자식 프로세스가 된다. 만약 Firefox는 그냥 두고 X window만 종료하면 Firefox도 종료가 된다.

 

ps -> 현재 프로세스의 상태를 확인하는 명령어
      ps -ef | grep 프로세스이름 을 주로 사용함 (프로세스의 번호 및 상태를 확인)
    
kill -> 프로세스를 강제로 종료하는 명령어
        -9 옵션을 함께 사용하면 프로세스가 무조건 종료됨
        "kill -9 프로세스번호" 를 실행해서 강제 종료 가능
    
pstree -> 부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여줌

 

 

프로세스 실습

 

실습 목표

  • 포그라운드 프로세스와 백그라운드 프로세스의 상호 전환 연습을 한다.

 

실습

 

 

server 가상머신에서 터미널을 실행하고 yes > /dev/null 명령을 입력한다. 백그라운드에서 yes라는 글자를 무한 출력한다.

백그라운드에서 동작하므로 화면에는 출력되지 않는다.

 

좌측 상단에 + 아이콘을 눌러서 새로운 터미널을 하나 더 연다.

 

 

새로운 터미널 창에 ps -ef | grep yes 명령을 입력하면 yes와 관련된 프로세스의 번호와 상태가 출력된다. 2494가 해당 프로세스의 번호, 2468이 부모 프로세스 번호이다. 

 

 

kill -9 2494(프로세스 번호) 명령을 입력해서 yes 프로세스를 죽인다. 그러면 처음 터미널에서 죽었음 이 출력되고 해당 프로세스가 종료된다.

 

 

혹은 그냥 ctrl + c 를 누르면 종료가 된다.

 

 

이번에는 포그라운드에서 백그라운드로 바꾸고 다시 포그라운드로 바꿔보자.

 

yes > /dev/null 명령을 입력한 다음 ctrl + z 를 누르면 멈춤 상태가 된다.(종료가 아니라 멈춤 상태이다.) bg 명령을 입력해 잠시 중지된 프로세스를 백그라운드로 실행한다.

 

jobs 명령을 입력하면 현재 백그라운드에서 동작하는 프로세스를 확인할 수 있다. 제일 앞에 있는 숫자 [1] 이 작업 번호이다.

 

fg 작업번호 (여기서는 1) 명령을 입력해 해당 프로세스를 다시 포그라운드로 실행할 수 있다. ctrl + c를 눌러서 프로세스를 종료시킨다.

 

 

이번에는 포그라운드와 백그라운드를 동시에 사용하는 법을 알아보자.

 

우리가 gedit 명령을 입력하면 gedit 에디터가 실행되는데 이때 터미널에는 명령을 할 수가 없게된다.

 

 

하지만 gedit & 명령을 사용하면 gedit 에디터를 사용하면서도 터미널에 명령을 내릴 수 있다. 즉, 백그라운드로 프로세스를 실행할 수가 있게 된다.

 

 

서비스와 소켓

 

서비스

  • 시스템과 독자적으로 구동되어 제공하는 프로세스를 의미한다.
  • 항상 작동하는 서버 프로세스이다.
  • 웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 등이 있다.
  • 실행 및 종료는 대개 'systemctl start / stop / restart 서비스이름' 으로 사용된다. 예를 들어, 웹 서버 서비스는 systemctl start httpd 명령으로 구동한다.
  • 서비스의 실행 스크립트 파일은 /usr/lib/systemd/system/ 디렉토리에 '서비스이름.service' 라는 이름으로 확인할 수 있다. 예를 들어, Cron 서비스는 crond.service 라는 이름의 파일로 존재한다.
  • systemctl start / stop / restart 서비스이름 명령을 실행해 이 디렉토리에 있는 대부분의 파일을 실행 / 중지 / 재시작 할 수 있다.

 

소켓

  • 필요할 때만 작동하는 서버 프로세스이다.
  • 외부에서 특정 서비스를 요청할 경우에 systemd가 구동시키고, 요청이 끝나면 소켓도 종료된다.
  • 소켓으로 설정된 서비스를 요청할 때는 처음 연결되는 시간이 앞에서 설명한 서비스에 비교했을 때 약간 더 걸릴 수 있다. 왜냐하면 systemd가 서비스를 새로 구동하는 데 시간이 소요되기 때문이다.
  • 소켓의 대표적인 예로 텔넷 서버가 있다.
  • 소켓과 관련된 스크립트 파일은 /usr/lib/systemd/system/ 디렉토리에 '소켓이름.socket' 이라는 이름으로 존재한다.

 

 

 

728x90
반응형