pipex 개념정리

이민규·2023년 7월 22일
0

42seoul

목록 보기
17/24

프로세스

프로세스란 실행 중인 프로그램을 의미한다 프로그램과 프로세스의 차이는 프로그램은 보조 기억장치에 존재하며 실행을 기달리는 데이터의 모음이라면 프로세스는 이러한 프로그램이 메모리에 적재되면 생명이 있는 프로세스가 됩니다

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

프로세스가 실행되는 도중 프로세스 생성 시스템 콜을 통해 새로운 프로세스를 생성할 수 있다 이때 다른 프로세스를 생성하는 프로세스를 부모 프로세스(Parent Process)라 하고 다른 프로세스에 의해서 생성된 프로세스를 자식 프로세스(Child Process)라고 한다

PID(process id)

PID는 Process id의 줄임말로 운영체제에서 프로세스를 구분하기 위해서 부여받은 번호를 의미한다
PID 의 최대값은 32768이며 32768 인 이유는 16bit signed integer 를 사용하기 때문이다.
PID 의 ID 할당 방식은 최근 할당된 PID 에 1을 더한 값으로 할당한다. 순서대로 1씩 할당되다가 32768 을 넘어가면 다시 1부터 시작한다.

PPID(parent process id)

PPID 는 Parent Process ID 의 줄임말로 부모 프로세스의 PID 를 의미한다.
부모 프로세스는 현재 실행 중인 프로세스 (자식 프로세스) 를 시스템 콜을 호출하여 생성한 프로세스를 의미한다.
만약 부모 프로세스가 자식 프로세스보다 일찍 종료되는 경우 자식 프로세스는 고아 프로세스가 되어 PPID 로 init process 의 PID 1을 가지게 된다.

init process

init 프로세스는 PID 1 을 가지는 최초 프로세스이다. 부팅 시 운영체제가 생성하는 프로세스이다.
프로세스는 다른 프로세스로부터 생성되는데, 이 때 생성된 프로세스가 자식이 되고 이를 생성한 프로세스가 부모 프로세스가 된다.

고아 프로세스

자식 프로세스가 살아있는 상태에서 부모프로세스가 종료가 되면 자식프로세스의 PPID 가 init 프로세스의 PID인 1로 변경되는데 이때 부모프로세스가 변경된 자식 프로세스를 고아 프로세스로라고 한다 고아 프로세스가 종료되면 init프로세스가 wait함수를 호출하여 고아 프로세스가 좀비 프로세스가 되는것을 방지해줍니다

좀비 프로세스

부모 프로세스가 살아있는 상태에서 자식 프로세스가 종료된 경우 이 프로세스와 관련된 메모리와 리소스들을 다른 프로세스에서 사용할 수 있게 됩니다 단 자식 프로세스가 종료된 이후에도 부모 프로세스가 자식 프로세스의 상태를 알고 싶어할 수 있기 때문에 커널은 자식 프로세스가 종료되어도 최소한의 정보(프로세스 id, 프로세스 종료 상태 등) 를 가지고 있는데 이러한 상태를 좀비 프로세스라고 합니다 부모 프로세스가 좀비 프로세스의 종료 상태를 회수하게 되면(wait 시스템 콜 호출) 좀비 프로세스는 제거됩니다

SIGPIPE

프로세스가 pipe를 읽을 수 없는 상태일 때 write를 할려고 하면 커널로부터 SIGPIPE시그널이 발생됩니다 기본적인 동작으로는 SIGPIPE신호를 받은 프로세스는 종료가 되고 다른 동작을 원한다면 Signal handler를 사용하여 자신이 원하는 동작이 실행되게 예외처리를 해주면 됩니다

리다이렉션

리다이렉션이란 컴퓨터 프로그램에서 표준 입력(stdin) 또는 표준 출력(stdout)의 방향을 변경하는 기능을 말합니다. 리다이렉션은 명령어 라인 인터페이스(Command Line Interface, CLI)를 사용하여 프로그램을 실행할 때 사용되며, 쉘(Shell)에서 지원됩니다.

  • 표준출력 리다이렉션
    프로그램이 결과를 터미널에 출력하지 않고 파일에 저장하거나 다른 프로그램으로 보내야 할 때 사용됩니다. 보통 > 기호를 사용하여 구현합니다.
  • 표준입력 리다이렉션
    프로그램이 사용자로부터 입력을 받아야 할 때, 파일로부터 입력을 받아야 할 때 등에 사용됩니다. 일반적으로 < 기호를 사용하여 구현합니다.
  • 표준에러 리다이렉션
    프로그램의 에러 메시지를 터미널에 출력하지 않고 파일에 저장하거나 다른 장치로 보내야 할 때 사용됩니다. 주로 2> 기호를 사용하여 구현합니다.

pipe

파이프는 두 개의 프로세스 간의 단방향 통신을 가능하게 해주는 IPC(Inter-Process Communication) 메커니즘입니다. 파이프를 사용하면 한 프로세스의 출력(stdout)을 다른 프로세스의 입력(stdin)으로 연결할 수 있습니다.
주로 파이프는 명령어 라인에서 두 개 이상의 명령어를 조합하여 사용할 때 유용합니다. 첫 번째 명령어의 출력이 두 번째 명령어의 입력으로 전달되도록 파이프를 사용합니다.
파이프는 | 기호를 사용하여 구현합니다.
ls -l 명령어를 실행한 결과를 grep의 표준 입력으로 받아서 그중 file을 찾는 동작을 수행한다

here_doc

here_doc은 셸 스크립트에서 사용되는 입력 리다이렉션 기능 중 하나입니다. here_doc은 스크립트에서 인라인으로 여러 줄의 텍스트를 입력으로 제공하는 방법을 제공합니다.
일반적인 리다이렉션은 파일에서 데이터를 읽거나 파일에 데이터를 쓰는데 사용됩니다. 하지만 here_doc은 파일 대신 셸 스크립트 내부에서 데이터를 제공하는 방법으로 사용됩니다.
here_doc은 주로 셸 스크립트에서 특정 명령어나 프로그램의 입력으로 여러 줄의 텍스트를 전달해야 할 때 유용합니다.
here_doc의 일반적인 문법은 다음과 같습니다: 마커가 나오기 전까지 표준입력으로 입력을 받아 명령어의 표준입력으로 사용하게 동작됩니다

마커에 따움표를 붙이면 변수 확장과 명령어 치환을 무시하고 동작합니다

변수 확장

변수 확장은 셸 스크립트에서 변수를 사용할 때 해당 변수가 저장하고 있는 값을 가져와서 대체하는 기능입니다. 변수는 $ 기호를 사용하여 참조되며, 변수 이름은 $ 기호 뒤에 따라옵니다. 예를 들어, my_variable이라는 변수가 있고 그 값이 "Hello"라면, $my_variable을 사용하여 "Hello"라는 값으로 확장됩니다.

명령어 치환

명령어 치환은 셸 스크립트에서 명령어의 실행 결과를 가져와서 변수에 할당하거나 다른 명령어의 인자로 사용하는 기능입니다. 명령어 치환은 $() 또는 `` (backtick) 기호로 수행할 수 있습니다.

profile
프로그래머 희망자(휴직중)

1개의 댓글

comment-user-thumbnail
2023년 7월 22일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기