프로세스란 실행 중인 프로그램을 의미한다 프로그램과 프로세스의 차이는 프로그램은 보조 기억장치에 존재하며 실행을 기달리는 데이터의 모음이라면 프로세스는 이러한 프로그램이 메모리에 적재되면 생명이 있는 프로세스가 됩니다
프로세스가 실행되는 도중 프로세스 생성 시스템 콜을 통해 새로운 프로세스를 생성할 수 있다 이때 다른 프로세스를 생성하는 프로세스를 부모 프로세스(Parent Process)라 하고 다른 프로세스에 의해서 생성된 프로세스를 자식 프로세스(Child Process)라고 한다
PID는 Process id의 줄임말로 운영체제에서 프로세스를 구분하기 위해서 부여받은 번호를 의미한다
PID 의 최대값은 32768이며 32768 인 이유는 16bit signed integer 를 사용하기 때문이다.
PID 의 ID 할당 방식은 최근 할당된 PID 에 1을 더한 값으로 할당한다. 순서대로 1씩 할당되다가 32768 을 넘어가면 다시 1부터 시작한다.
PPID 는 Parent Process ID 의 줄임말로 부모 프로세스의 PID 를 의미한다.
부모 프로세스는 현재 실행 중인 프로세스 (자식 프로세스) 를 시스템 콜을 호출하여 생성한 프로세스를 의미한다.
만약 부모 프로세스가 자식 프로세스보다 일찍 종료되는 경우 자식 프로세스는 고아 프로세스가 되어 PPID 로 init process 의 PID 1을 가지게 된다.
init 프로세스는 PID 1 을 가지는 최초 프로세스이다. 부팅 시 운영체제가 생성하는 프로세스이다.
프로세스는 다른 프로세스로부터 생성되는데, 이 때 생성된 프로세스가 자식이 되고 이를 생성한 프로세스가 부모 프로세스가 된다.
자식 프로세스가 살아있는 상태에서 부모프로세스가 종료가 되면 자식프로세스의 PPID 가 init 프로세스의 PID인 1로 변경되는데 이때 부모프로세스가 변경된 자식 프로세스를 고아 프로세스로라고 한다 고아 프로세스가 종료되면 init프로세스가 wait함수를 호출하여 고아 프로세스가 좀비 프로세스가 되는것을 방지해줍니다
부모 프로세스가 살아있는 상태에서 자식 프로세스가 종료된 경우 이 프로세스와 관련된 메모리와 리소스들을 다른 프로세스에서 사용할 수 있게 됩니다 단 자식 프로세스가 종료된 이후에도 부모 프로세스가 자식 프로세스의 상태를 알고 싶어할 수 있기 때문에 커널은 자식 프로세스가 종료되어도 최소한의 정보(프로세스 id, 프로세스 종료 상태 등) 를 가지고 있는데 이러한 상태를 좀비 프로세스라고 합니다 부모 프로세스가 좀비 프로세스의 종료 상태를 회수하게 되면(wait 시스템 콜 호출) 좀비 프로세스는 제거됩니다
프로세스가 pipe를 읽을 수 없는 상태일 때 write를 할려고 하면 커널로부터 SIGPIPE시그널이 발생됩니다 기본적인 동작으로는 SIGPIPE신호를 받은 프로세스는 종료가 되고 다른 동작을 원한다면 Signal handler를 사용하여 자신이 원하는 동작이 실행되게 예외처리를 해주면 됩니다
리다이렉션이란 컴퓨터 프로그램에서 표준 입력(stdin) 또는 표준 출력(stdout)의 방향을 변경하는 기능을 말합니다. 리다이렉션은 명령어 라인 인터페이스(Command Line Interface, CLI)를 사용하여 프로그램을 실행할 때 사용되며, 쉘(Shell)에서 지원됩니다.
파이프는 두 개의 프로세스 간의 단방향 통신을 가능하게 해주는 IPC(Inter-Process Communication) 메커니즘입니다. 파이프를 사용하면 한 프로세스의 출력(stdout)을 다른 프로세스의 입력(stdin)으로 연결할 수 있습니다.
주로 파이프는 명령어 라인에서 두 개 이상의 명령어를 조합하여 사용할 때 유용합니다. 첫 번째 명령어의 출력이 두 번째 명령어의 입력으로 전달되도록 파이프를 사용합니다.
파이프는 | 기호를 사용하여 구현합니다.
ls -l 명령어를 실행한 결과를 grep의 표준 입력으로 받아서 그중 file을 찾는 동작을 수행한다
here_doc은 셸 스크립트에서 사용되는 입력 리다이렉션 기능 중 하나입니다. here_doc은 스크립트에서 인라인으로 여러 줄의 텍스트를 입력으로 제공하는 방법을 제공합니다.
일반적인 리다이렉션은 파일에서 데이터를 읽거나 파일에 데이터를 쓰는데 사용됩니다. 하지만 here_doc은 파일 대신 셸 스크립트 내부에서 데이터를 제공하는 방법으로 사용됩니다.
here_doc은 주로 셸 스크립트에서 특정 명령어나 프로그램의 입력으로 여러 줄의 텍스트를 전달해야 할 때 유용합니다.
here_doc의 일반적인 문법은 다음과 같습니다: 마커가 나오기 전까지 표준입력으로 입력을 받아 명령어의 표준입력으로 사용하게 동작됩니다
마커에 따움표를 붙이면 변수 확장과 명령어 치환을 무시하고 동작합니다
변수 확장은 셸 스크립트에서 변수를 사용할 때 해당 변수가 저장하고 있는 값을 가져와서 대체하는 기능입니다. 변수는 $ 기호를 사용하여 참조되며, 변수 이름은 $ 기호 뒤에 따라옵니다. 예를 들어, my_variable이라는 변수가 있고 그 값이 "Hello"라면, $my_variable을 사용하여 "Hello"라는 값으로 확장됩니다.
명령어 치환은 셸 스크립트에서 명령어의 실행 결과를 가져와서 변수에 할당하거나 다른 명령어의 인자로 사용하는 기능입니다. 명령어 치환은 $() 또는 `` (backtick) 기호로 수행할 수 있습니다.
좋은 글이네요. 공유해주셔서 감사합니다.