Bash의 포크

Naila Saad Siddiqui 2024년2월15일
Bash의 포크

이 기사는 새로운 비동기 자식 프로세스를 분기하기 위한 C/C++ 포크 시스템 호출에 대한 Bash 등가물(즉, 하위 셸)에 대한 소개 자습서를 제공합니다.

Bash의 포크

C/C++에서 시스템 호출은 새로운 프로세스, 즉 호출 프로세스의 자식 프로세스를 생성하는 것입니다. 새 프로세스가 생성된 후 두 프로세스는 비동기적으로 실행됩니다.

둘 다 자체 주소 공간이 있습니다. 어떤 프로세스도 실행이 끝나기 전에 다른 프로세스가 끝날 때까지 기다리지 않습니다. 그러나 Bash에서는 이러한 자식 프로세스를 하위 셸이라고 합니다.

이러한 하위 셸은 병렬로 실행되어 여러 작업을 동시에 수행할 수 있습니다. 따라서 Bash의 포크 기능은 새 하위 셸을 생성하여 구현할 수 있습니다.

하위 셸을 만들려면 아래 구문을 따릅니다.

(sub_process) &

하위 프로세스로 실행할 함수 또는 코드 줄을 괄호로 묶은 다음 앰퍼샌드 & 기호를 넣습니다. 이 괄호 안의 모든 명령문은 하위 프로세스를 만들고 하위 쉘로 실행됩니다.

다음 예를 고려하십시오.

Bash 스크립트 1의 포크

이 예제에서는 child_process() 함수를 만들고 몇 가지 명령문을 작성했습니다. 나중에 괄호로 묶고 끝에 &를 배치하여 해당 함수를 호출했습니다.

이것에 의해 함수는 서브쉘에서 호출될 것입니다. 상위 쉘은 다음 명령문을 동시에 실행합니다.

Bash 출력 1의 포크

자식 프로세스가 print 문에 접근하기 전에 부모 프로세스(동시에 실행 중이었기 때문에)가 다음 문을 인쇄했음을 출력에서 볼 수 있습니다.

서브쉘의 변수

변수에 관한 한 부모 쉘이든 하위 쉘이든 모든 쉘에는 변수가 있습니다. 둘 다 자체 주소 공간이 있으므로 프로세스는 결국 별도의 로컬 변수를 갖게 됩니다.

아래 예를 살펴보겠습니다.

Bash 스크립트 2의 포크

이 스크립트에서는 상위 프로세스에서 local_var 변수를 생성하고 해당 값을 설정했습니다. 나중에 child_process 함수에서 하위 셸에 새 값을 할당했습니다.

자식 프로세스를 생성한 후, 부모 프로세스는 변수의 값을 출력하므로 부모의 값이 출력됩니다.

출력은 다음과 같습니다.

Bash 출력 2의 포크

위의 출력에서 로컬 변수는 하위 프로세스의 코드 블록 외부에서 액세스할 수 없음을 알 수 있습니다. 상위 프로세스도 하위 프로세스가 설정한 값에 액세스할 수 없습니다.