sh명령어에 대해 배워보자

신준우·2023년 5월 24일
0

시스템 프로그래밍

목록 보기
1/12
post-thumbnail

학습목표

  • 리눅스 쉘은 무엇을 하는가?
  • 프로세스의 리눅스 모델
  • 프로그램을 실행하는 방법
  • 프로세스를 생성하는 방법
  • parent와 child 프로세스간의 소통방법
  • for, exec, wait, exit 라는 System call과 Function에 대해 이해하기
  • 명령어 sh, ps에 대해 알아보기

프로세스(Process) == 실행되는 프로그램(Program)

- 프로그램이란?

  • 파일 안에 저장되어있는 기계 명령어
    • 소스코드를 이진 코드(binary code)로 컴파일링 해서 실행된다

      이런식으로 명령어를 입력하면 (gcc를 통한 컴파일)


이런식으로, 컴파일이 된 이진 파일이 생성된다

- "프로그램을 실행한다"라는 의미란 무엇일까?

  • 메모리에 기계 명령어(machine instructions)의 리스트를 로드하는 과정이다
  • 각각의 명령을 순차적으로 (또는 병렬로) 실행하는 방식으로 CPU를 동작하게 함

- 실행파일 (Executable) vs 프로세스(Process)

  • 실행파일 (Executable): 기계 언어에 대한 개요와 데이터
  • 프로세스(Process): 프로그램이 가동되는 메모리 공간과, 동적 설정들

※ 사실 문자 그대로의 설명은 잘 와닿지 않는다.

  • 간단히 얘기하면, 실행파일은 실행이 가능한 코드와 데이터, 실행 전의 파일이며,
    프로세스는 실행 파일의 인스턴스, 즉 메모리에 로드되어 실행중인 프로그램을 의미한다

프로세스를 ps를 통해 이해해보자

  • ps(process status) 는 리눅스의 사용자 명령어(user command)이다.

    대충 터미널에다 치는 그런 명령어를 의미한다. 어렵게 생각하지 말자

  • user space, 즉 사용자가 접근할수 있는공간 (흔히 클릭으로 들어가는 폴더, 실행파일들 등등)

  • user space에서 현재 실행중인 프로세스를 보여준다

※ ls명령어와 유사하지만, 현재 실행중인 프로세스만 보여준다는점, 시간과 프로세스 명령행 등 다양한 값들을 함께 출력해준다

ps를 좀 더 알아보자

  • '-a' 옵션
    - 더 많은 프로세스를 나열해준다
    - 다른 유저들이 실행한 프로세스, 그리고 다른 터미널에서 실행된 프로세스도 보여준다
    - 쉘(bash)에 종속되지 않는다

    ※ 이게 무슨소리인가 싶을것이다.
    우선 쉘이라는 개념에 대해 먼저 알 필요가 있을거같다.

    • 프로그램은 이렇게 실행된다
    • 응용프로그램 -> 쉘 -> 커널 -> 하드웨어
      - 쉘은 명령어를 해석하고, 운영체제에 전달, 그리고 그 결과값을 출력해준다
    • 어차피 ps명령어는 커널에서 실행되는 프로세스를 그대로 출력하는것이기 때문에
      쉘과는 관련이 없다. 해석할 명령어가 따로 없기 때문.
  • '-l' 옵션
    - '-a' 옵션에서 좀더 길게 출력해준다
    - 더 많은 정보를 포함함

    각 항목의 의미를 알아보자

    • S : 현재 실행중인 프로세스의 상태
      - S : sleeping
      - R : running
      - T : stopped
    • PRI
      - CPU의 우선권을 얼마나 가질수 있는가
      - 값이 높을수록 더 적은 우선권을 가진다
    • UID
      - 유저 id
    • PPID
      - parent process의 id
    • C
      - 프로세스의 CPU 사용량
    • NI (Niceness level)
      - 19에서 -20사이의 값을 가진다
      - 더 높은 값을 가질수록 CPU time을 다른 프로세스들에게 잘 양보해준다
    • SZ
      - 프로세스의 크기 (KB단위)
      - 이 프로세스를 위해 사용되고있는 메모리의 양
    • WCHAN
      - 왜 프로세스가 잠들어있는지를 보여준다
      - 어떤 프로세스가 어떤 커널의 함수에 잠들어있는지 이름을 보여준다
    • ADDR(process memory address) and F (flag)
      - 더 이상 쓰이지 않는다..

뭐 사실 이 내용들이 그리 중요한지는 모르겠다. 대충 이런것들이 있다 정도로 넘어가자.

  • '-fa' 옵션
    - 좀 더 사람에게 친화적인(?) 옵션이다 ('-a' 옵션보다는...)
    - UID값 대신에 username이 표시된다
    - CMD 열에는 완전한 명령 줄이 나열된다

  • 더 많은 정보를 위해서는 터미널에 'man ps'를 입력해보자...

기본적인 ps명령어에 대한 설명이었을뿐, 큰 의미는 없다.

profile
보안

0개의 댓글