---
description: 리눅스에서 프로세스와 스레드의 생성
---

# Creation of processes and threads in Linux

1. **프로세스 생성**
   * **`fork()`**: 현재 실행 중인 프로세스의 복사본을 만듭니다. 원래의 프로세스는 부모 프로세스라고 부르고, 복사된 새 프로세스는 자식 프로세스라고 합니다. 부모와 자식은 독립적인 메모리 공간을 가지므로, 한쪽에서의 메모리 변경이 다른 쪽에 영향을 주지 않습니다.
2. **스레드 생성**
   * **`pthread_create()`**: POSIX 스레드 라이브러리에서 제공하는 함수로, 새로운 스레드를 생성합니다. 내부적으로 **`clone()`** 시스템 콜을 사용합니다.
   * **`clone()`**: **`clone()`** 시스템 콜은 \*\*`fork()`\*\*와 유사하게 동작하지만, 생성된 프로세스 (또는 스레드)가 공유하는 리소스를 세밀하게 제어할 수 있습니다. **`CLONE_VM`** 플래그를 사용하여 부모와 자식이 동일한 메모리 공간을 공유하도록 설정할 수 있습니다. 이렇게 설정하면, 실질적으로 스레드를 생성하는 것과 같아집니다.

이처럼 리눅스에서는 스레드와 프로세스의 경계가 덜 명확하며, 둘 다 **`clone()`** 시스템 콜을 기반으로 합니다. \*\*`fork()`\*\*는 전통적인 프로세스 생성을 위한 것이고, \*\*`clone()`\*\*은 그것보다 더 세밀한 제어를 원할 때 사용합니다.
