Bash 쉘이 서브쉘에서 스크립트를 실행하는 이유는 무엇입니까? 이렇게 하면 어떤 이점이 있나요?
답변1
쉘은 원래 시스템의 "사용자 인터페이스"라고 불렸으며 다음과 같은 책임을 맡았습니다.구현하다절차(일명 작업). 작업을 호출하기 위해 셸은 커널에 작업을 수행하도록 요청합니다. 커널은 작업이 사용할 메모리와 파일을 읽거나 쓸 수 있는 권한을 관리합니다. 커널에게 프로그램을 "실행"하도록 요청하는 기본 접근 방식은 다음과 같습니다.십자가새 작업(새 PID(프로세스 번호) 제공)구현하다새 PID의 새 프로그램. 커널은 매개변수 목록을 수신합니다:
int execve(const char *filename, char *const argv[], char *const envp[]);
기본적으로 커널에 filename
매개변수를 사용하여 실행 하도록 요청합니다 argv[]
. 커널은 요청된 작업을 수행하고 프로그램이 종료되면 제어권이 상위 프로세스로 반환됩니다.
껍질을 다음과 같이 취함집행자이는 일부 통역사가 이해할 수 있는 텍스트 파일도 실행할 수 있는 프로그램을 위한 확실한 확장입니다. 이는 #! /interpreter
커널도 이해하는 shebang 메커니즘입니다.
따라서 쉘은 "스크립트를 실행"할 수 있지만(때로는 수행합니다), 가장 자연스러운 실행 순서에서는 커널이 다른 프로그램처럼 이를 수행해야 합니다. 즉, 프로그램을 로드하고 프로세스 제어(PID)를 제공해야 합니다.
서로 다른 PID 내에서 실행되는 프로그램은 상위 PPID를 오염시키지 않을 것으로 예상됩니다. 즉, 하나의 PID를 변경해도 상위 PID에는 영향을 미치지 않습니다.
따라서 "스크립트"가 실행되면 (보통) 새로운 PID를 얻습니다. 서브쉘이라고 부르는지 서브쉘이라고 부르는지 헷갈릴 때도 있지만 중요한 것은 다른 PID 내에서 실행된다는 것입니다. 일반적으로 하위 프로세스(PID)입니다.