CS/Linux

[Linux] 파이프, 프로세스, 서비스

kyoulho 2024. 9. 28. 15:42

파이프 (Pipe)

파이프는 두 개의 프로그램을 연결해 주는 통로이다. 이를 통해 한 프로그램의 출력을 다른 프로그램의 입력으로 전달할 수 있다. 파이프는 | 문자를 사용하여 표현한다.

파이프 사용 예시

ls -l /etc | more

위 명령어는 /etc 디렉토리의 상세 목록을 ls -l /etc 명령어로 출력한 후, 그 출력을 more 명령어를 통해 페이지 단위로 보여준다. 이렇게 하면 긴 목록을 한 화면씩 확인할 수 있어 편리하다.

필터 (Filter)

필터는 데이터의 특정 부분만을 걸러내어 필요한 정보만 추출하는 명령어들이다. 필터는 주로 파이프와 함께 사용되며, 데이터를 가공하거나 검색할 때 유용하다. 대표적인 필터 명령어로는 grep, tail, wc, sort, awk, sed 등이 있다.

필터 사용 예시

ps -ef | grep bash

이 명령어는 현재 실행 중인 모든 프로세스를 ps -ef 명령어로 출력한 후, 그 출력에서 bash와 관련된 항목만을 grep bash를 통해 검색하여 표시한다. 이를 통해 특정 프로세스를 신속하게 찾을 수 있다.


리디렉션 (Redirection)

리디렉션은 명령어의 표준 입출력(표준 입력, 표준 출력, 표준 오류)을 파일로 변경하거나 파일의 내용을 명령어의 입력으로 사용하는 기능이다. 이를 통해 명령어의 출력을 파일에 저장하거나, 파일의 데이터를 명령어의 입력으로 활용할 수 있다.

리디렉션 사용 예시

ls -l > list.txt
sort < list.txt > out.txt
  1. ls -l > list.txt: ls -l 명령어의 출력을 list.txt 파일에 저장한다.
  2. sort < list.txt > out.txt: list.txt 파일의 내용을 sort 명령어로 정렬한 후, 그 출력을 out.txt 파일에 저장한다.

이처럼 리디렉션을 사용하면 명령어의 결과를 파일로 저장하거나, 파일의 데이터를 명령어의 입력으로 활용할 수 있다.

프로세스 (Process)

포그라운드 프로세스

포그라운드 프로세스는 실행 시 화면에 나타나 사용자와 직접 상호작용하는 프로세스이다.

백그라운드 프로세스

백그라운드 프로세스는 실행은 되었지만 화면에 나타나지 않고 계속 실행되는 프로세스이다.

프로세스 번호 (PID)와 작업 번호

  • 프로세스 번호 (PID): 프로세스는 고유한 번호인 PID를 할당받는다. 이 번호는 시스템 내에서 각 프로세스를 식별하는 데 사용된다.
  • 작업 번호: 작업 번호는 현재 실행되고 있는 백그라운드 프로세스의 순차적인 번호를 의미한다. 작업 번호는 jobs 명령어를 통해 확인할 수 있다.

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

모든 프로세스는 부모 프로세스를 가지고 있으며, 부모 프로세스를 종료하면 자식 프로세스도 자동으로 종료된다. 이는 프로세스 간의 관계를 유지하고 시스템 자원을 효율적으로 관리하기 위한 메커니즘이다.

프로세스 관리 명령어

ps 명령어

ps 명령어는 현재 실행 중인 프로세스를 확인하는 데 사용된다. 다양한 옵션을 통해 필요한 정보를 상세히 볼 수 있다.

주요 옵션

  • -e 또는 -A: 모든 프로세스를 표시한다.
  • -f: 전체 형식(full-format)으로 프로세스 정보를 표시한다.
  • -u <사용자>: 특정 사용자의 프로세스를 표시한다.
  • -o <형식>: 출력 형식을 지정한다.
ps -ef 명령어의 출력 정보

ps -ef 명령어를 실행하면 다음과 같은 정보가 화면에 표시된다.

  • UID: 프로세스를 실행한 사용자 ID.
  • PID: 프로세스의 고유 번호(Process ID).
  • PPID: 부모 프로세스의 PID.
  • C: CPU 사용률.
  • STIME: 프로세스 시작 시간.
  • TTY: 프로세스가 연결된 터미널.
  • TIME: 프로세스가 사용한 CPU 시간.
  • CMD: 실행된 명령어 및 인자.

예시 출력:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Sep01 ?        00:00:04 /sbin/init
root         2     0  0 Sep01 ?        00:00:00 [kthreadd]
...

이 정보를 통해 프로세스의 소유자, 실행 시간, 자식 프로세스 등 다양한 정보를 파악할 수 있다.

kill 명령어

kill 명령어는 특정 프로세스를 종료하는 데 사용된다. 종료할 프로세스의 PID를 지정하여 프로세스를 종료할 수 있다.

 PID가 1234인 프로세스를 종료한다. 필요에 따라 다양한 신호를 보내어 프로세스를 제어할 수 있다.

kill 1234

 

pstree 명령어

pstree 명령어는 프로세스의 계층 구조를 트리 형태로 보여준다. 이를 통해 부모-자식 관계를 시각적으로 이해할 수 있다.

이 명령어는 현재 실행 중인 프로세스의 트리 구조를 표시한다.

pstree

Ctrl + Z로 프로세스 일시 중단

Ctrl + Z는 현재 실행 중인 포그라운드 프로세스를 일시적으로 중단(suspend)시키는 키 조합이다. 프로세스는 백그라운드에 일시 정지된 상태로 전환되며, 필요에 따라 다시 포그라운드로 가져올 수 있다.

[root@localhost ~]# yes > /dev/null
^Z
[1]+  멈춤                  yes > /dev/null
  • yes > /dev/null: yes 프로세스를 무한히 실행하면서 출력을 /dev/null로 버린다.
  • Ctrl + Z를 눌러 yes 프로세스를 일시 정지시킨다.
  • [1]+ 멈춤 yes > /dev/null: 작업 번호 1로 지정된다.

bg 명령어로 백그라운드 실행

일시 정지된 프로세스를 백그라운드에서 계속 실행하려면 bg 명령어를 사용한다.

[root@localhost ~]# bg
[1]+ yes > /dev/null &
  • bg: 작업 번호 1인 yes > /dev/null 프로세스를 백그라운드에서 실행하도록 전환한다.

jobs 명령어로 작업 목록 확인

현재 쉘에서 실행 중인 백그라운드 작업 목록을 확인하려면 jobs 명령어를 사용한다.

[root@localhost ~]# jobs
[1]+  실행중               yes > /dev/null &
  • [1]+ 실행중 yes > /dev/null &: 작업 번호 1인 yes > /dev/null 프로세스가 백그라운드에서 실행 중임을 나타낸다.

fg 명령어로 포그라운드로 가져오기

백그라운드에서 실행 중인 프로세스를 다시 포그라운드로 가져오려면 fg 명령어를 사용한다.

[root@localhost ~]# fg 1
yes > /dev/null
  • fg 1: 작업 번호 1인 yes > /dev/null 프로세스를 포그라운드로 가져온다.
  • 이제 yes 프로세스가 포그라운드에서 실행되며, Ctrl + Z를 눌러 다시 일시 정지시킬 수 있다.

 


서비스 관리

서비스는 시스템이 부팅될 때 자동으로 시작되는 프로세스 또는 특정 작업을 수행하는 프로세스를 말한다. 예를 들어, 웹 서버, 데이터베이스 서버, SSH 서버 등이 서비스에 해당한다. 서비스 관리는 systemctl 명령어를 통해 수행할 수 있다.

systemctl 명령어

systemctl은 서비스의 시작, 중지, 재시작, 상태 확인 등을 수행하는 명령어이다.

sudo systemctl start httpd        # httpd 서비스 시작
sudo systemctl stop httpd         # httpd 서비스 중지
sudo systemctl restart httpd      # httpd 서비스 재시작
sudo systemctl status httpd       # httpd 서비스 상태 확인

서비스 자동 시작 설정

서비스가 시스템 부팅 시 자동으로 시작되도록 설정하려면 enable 옵션을 사용한다. 반대로 자동 시작을 비활성화하려면 disable 옵션을 사용한다.

sudo systemctl enable httpd   # httpd 서비스를 부팅 시 자동 시작으로 설정
sudo systemctl disable httpd  # httpd 서비스를 부팅 시 자동 시작에서 제외

서비스 실행 스크립트 파일

서비스의 실행 스크립트 파일은 /usr/lib/systemd/system/서비스이름.service 경로에 위치한다. 이 파일을 통해 서비스의 동작 방식을 정의할 수 있다.

/usr/lib/systemd/system/httpd.service

 


소켓 (Socket)

소켓은 네트워크 서비스를 요청할 때 사용하는 통신 지점이다. 서비스는 항상 가동되지만, 소켓은 외부에서 특정 서비스를 요청할 경우에 systemd가 구동시킨다. 그리고 요청이 끝나면 소켓도 종료된다. 소켓으로 설정된 서비스를 요청할 때는 처음 연결되는 시간이 약간 더 걸릴 수 있다. 대표적인 예는 텔넷 서버이다.

소켓 관련 스크립트 파일

소켓과 관련된 스크립트 파일은 /usr/lib/systemd/system/소켓이름.socket 경로에 위치한다. 이 파일을 통해 소켓의 동작 방식을 정의할 수 있다.

예시:

/usr/lib/systemd/system/ssh.socket

소켓 사용 예시

sudo systemctl start ssh.socket
  • ssh.socket을 시작하면, 외부에서 SSH 요청이 들어올 때마다 systemd가 SSH 서비스를 자동으로 구동시킨다.
  • 요청이 끝나면 SSH 서비스와 소켓이 종료된다.

소켓의 장단점

  • 장점:
    • 서비스가 항상 실행 중이지 않아도 되므로 자원 절약.
    • 필요할 때만 서비스를 구동시켜 초기화 시간을 절감.
  • 단점:
    • 첫 번째 요청 시 서비스 시작 시간이 추가로 소요될 수 있음.
728x90

'CS > Linux' 카테고리의 다른 글

[Linux] 하드웨어 디스크 추가하는 방법  (0) 2024.10.01
[Linux] 부트로더  (0) 2024.09.29
[Linux] 주요 네트워크 명령어 및 설정 파일  (0) 2024.09.27
[Linux] CRON과 AT  (0) 2024.09.22
[Linux] 파일 위치 검색  (1) 2024.09.22