Manpages

이 름

__clone − 프 로 세 스 생 성

사 용 법

#include <sched.h>

int __clone(int (*fn) (void *arg), void *child_stack, int flags, void *arg)

설 명

__clonefork(2) 처 럼 새 로 운 프 로 세 스 를 생 성 한 다 . fork(2) 와 는 달 리 , __clone 은 자 식 프 로 세 스 가 메 모 리 공 유 , 파 일 기 술 자 들 의 테 이 블 , 시 그 널 핸 들 러 의 테 이 블 과 같 이 그 부 모 프 로 세 스 와 함 께 실 행 문 맥 의 부 분 들 을 공 유 하 도 록 허 용 한 다 . __clone의 주 된 사 용 은 쓰 레 드 를 구 현 하 는 것 이 다 . 공 유 메 모 리 에 서 동 시 에 실 행 하 는 프 로 그 램 에 서 멀 티 쓰 레 드 의 제 어 . 자 식 프 로 세 스 가 생 성 되 면 , 이 는 함 수 어 플 리 케 이 션 을 실 행 시 킨 다 .

fn(arg). fn 인 수 는 실 행 초 기 에 자 식 프 로 세 스 에 의 해 호 출 되 는 함 수 에 대 한 포 인 터 이 다 . argfn 에 다 시 전 달 되 는 인 수 이 다 . fn(arg) 함 수 어 플 리 케 이 션 이 리 턴 하 면 , 자 식 프 로 세 스 는 종 료 된 다 . fn 에 의 해 리 턴 되 는 integer는 자 식 프 로 세 스 가 빠 져 나 가 는 exit코 드 이 다 . 자 식 프 로 세 스 는 exit(1) 을 호 출 하 거 나 , fatal 시 그 널 을 받 은 후 에 명 백 하 게 종 료 될 수 있 다 .

child_stack 인 수 는 자 식 프 로 세 스 에 의 해 사 용 되 는 스 택 의 위 치 를 명 시 한 다 . 자 식 및 부 모 프 로 세 스 가 메 모 리 를 공 유 할 수 있 기 때 문 에 , 일 반 적 으 로 자 식 프 로 세 스 가 부 모 프 로 세 스 와 동 일 한 스 택 에 서 실 행 되 는 것 은 불 가 능 하 다 . 부 모 프 로 세 스 는 따 라 서 자 식 프 로 세 스 를 위 한 메 모 리 를 설 정 해 야 하 며 , __clone 에 대 한 포 인 터 를 전 달 해 야 한 다 .

리 눅 스 를 실 행 하 는 모 든 프 로 세 서 (HP PA 프 로 세 서 제 외 )들 상 에 서 스 택 은 아 래 쪽 으 로 쌓 이 므 로 , child_stack 은 자 식 스 택 을 위 한 설 정 에 보 통 메 모 리 공 간 의 상 위 주 소 를 가 리 킨 다 . 적 은 바 이 트 의 flags 는 자 식 이 죽 을 때 부 모 에 게 전 송 되 는 시 그 널 의 번 호 를 포 함 한 다 . flags 는 또 한 부 모 와 자 식 프 로 세 스 사 이 에 무 엇 이 공 유 되 는 가 를 명 시 하 기 위 해 서 다 음 의 상 수 들 중 하 나 혹 은 몇 가 지 를 bitwise할 수 있 다 .
CLONE_VM

만 일 CLONE_VM 이 설 정 되 면 , 부 모 와 자 식 프 로 세 스 들 은 동 일 한 메 모 리 공 간 에 서 실 행 된 다 . 특 히 , 부 모 프 로 세 스 혹 은 자 식 프 로 세 스 들 에 의 해 수 행 되 는 메 모 리 작 성 은 다 른 프 로 세 스 에 서 도 볼 수 있 다 . 더 우 기 자 식 또 는 부 모 프 로 세 스 에 의 해 mmap(2) 혹 은 munmap(2)으 로 수 행 되 는 메 모 리 매 핑 또 는 언 매 핑 역 시 다 른 프 로 세 스 에 영 향 을 미 친 다 . 만 일 CLONE_VM 이 설 정 되 지 않 으 면 , 자 식 프 로 세 스 는 .BR __clone의 시 간 에 서 , 부 모 의 메 모 리 공 간 의 분 리 된 복 제 내 에 서 실 행 된 다 .

fork(2) 의 경 우 에 서 볼 수 있 듯 이 , 프 로 세 스 들 중 하 나 에 의 해 수 행 되 는 메 모 리 작 성 혹 은 파 일 매 핑 /언 매 핑 은 다 른 것 에 대 해 영 향 을 미 치 지 않 는 다 .

CLONE_FS

만 일 CLONE_FS 가 설 정 되 면 , 부 모 와 자 식 프 로 세 스 들 은 동 일 한 파 일 시 스 템 정 보 를 공 유 한 다 . 이 는 파 일 시 스 템 의 루 트 , 현 재 작 업 디 렉 토 리 , 그 리 고 umask를 포 함 한 다 . 부 모 혹 은 자 식 프 로 세 스 에 의 해 수 행 되 는 chroot(2), chdir(2), 또 는 umask(2) 에 대 한 호 출 역 시 다 른 프 로 세 스 에 영 향 을 미 친 다 . 만 일 CLONE_FS 이 설 정 되 지 않 으 면 자 식 프 로 세 스 는 __clone 의 시 간 에 서 , 부 모 의 메 모 리 공 간 의 분 리 된 복 제 내 에 서 실 행 된 다 .

한 프 로 세 스 에 의 해 나 중 에 수 행 될 chroot(2), chdir(2), umask(2) 에 대 한 호 출 은 다 른 프 로 세 스 에 영 향 을 미 치 지 않 는 다 .

CLONE_FILES

만 일 CLONE_FILES 이 설 정 되 면 , 부 모 와 자 식 프 로 세 스 는 동 일 한 파 일 기 술 자 테 이 블 을 공 유 한 다 . 파 일 기 술 자 들 은 항 상 부 모 그 리 고 자 식 프 로 세 스 내 의 동 일 한 파 일 들 을 참 조 한 다 . 부 모 혹 은 자 식 프 로 세 스 에 의 해 만 들 어 진 모 든 파 일 기 술 자 는 다 른 프 로 세 스 에 서 도 역 시 타 당 하 다 . 이 와 유 사 하 게 , 만 일 프 로 세 스 들 중 하 나 가 파 일 기 술 자 를 닫 거 나 , 관 련 된 플 래 그 들 을 변 경 시 키 면 , 기 타 프 로 세 스 가 역 시 영 향 을 받 는 다 .. CLONE_FILES 이 설 정 되 지 않 으 면 , 자 식 프 로 세 스 는 __clone의 시 간 에 부 모 프 로 세 스 에 서 열 린 파 일 기 술 자 들 의 복 사 본 을 상 속 받 는 다 . 부 모 혹 은 자 식 프 로 세 스 들 중 하 나 에 의 해 나 중 에 수 행 될 파 일 기 술 자 들 에 대 한 연 산 은 다 른 것 에 영 향 을 주 지 않 는 다 .

CLONE_SIGHAND

CLONE_SIGHAND 이 설 정 되 면 , 부 모 및 자 식 프 로 세 스 들 은 시 그 널 처 리 기 의 동 일 한 테 이 블 을 공 유 한 다 . 만 일 보 모 혹 은 자 식 프 로 세 스 가 sigaction(2) 를 호 출 하 여 시 그 널 과 관 련 된 행 위 를 변 경 시 키 고 자 한 다 면 , 다 른 프 로 세 스 내 의 그 행 위 역 시 변 경 된 다 . 그 러 나 , 부 모 와 자 식 프 로 세 스 들 은 여 전 히 독 특 한 시 그 널 마 스 크 과 일 련 의 펜 딩 시 그 널 들 을 갖 는 다 . 따 라 서 그 들 중 하 나 는 다 른 시 그 널 에 영 향 을 주 지 않 고 , sigprocmask(2) 을 사 용 하 여 일 부 시 그 널 을 블 로 킹 하 거 나 , 하 지 않 는 다 .

CLONE_SIGHAND 이 설 정 되 지 않 으 면 , 자 식 프 로 세 스 는 __clone 의 시 간 에 부 모 프 로 세 스 에 서 열 린 시 그 널 처 리 기 들 의 복 사 본 을 상 속 받 는 다 . 부 모 혹 은 자 식 프 로 세 스 들 중 하 나 에 의 해 나 중 에 수 행 될 파 일 기 술 자 들 에 대 한 연 산 은 다 른 프 로 세 스 에 영 향 을 주 지 않 는 다 . 하 나 의 프 로 세 스 에 의 해 수 행 되 는 sigaction(2) 에 대 한 호 출 은 다 른 프 로 세 스 에 영 향 을 주 지 않 는 다 .

CLONE_PID

만 일 CLONE_PID 이 설 정 되 면 , 자 식 프 로 세 스 는 부 모 프 로 세 스 와 같 은 동 일 한 프 로 세 스 ID를 갖 고 만 들 어 진 다 . 만 일 CLONE_PID 이 설 정 되 지 않 으 면 , 자 식 프 로 세 스 는 부 모 프 로 세 스 와 다 른 독 특 한 프 로 세 스 ID를 소 유 한 다 .

반 환 값

성 공 하 면 , 자 식 프 로 세 스 의 PID는 부 모 의 실 행 할 쓰 레 드 내 에 리 턴 된 다 . 실 패 하 면 , −1이 부 모 의 문 맥 에 리 턴 되 고 , 어 떤 자 식 프 로 세 스 도 생 성 되 지 않 으 며 , errno 가 적 절 하 게 설 정 될 것 이 다 .

에 러

EAGAIN

이 미 너 무 나 많 은 프 로 세 스 들 이 실 행 중 에 있 다 .

ENOMEM

__clone 은 자 식 에 대 한 작 업 구 조 를 할 당 하 거 나 , 복 사 될 필 요 가 있 는 부 모 의 컨 텍 스 트 에 대 한 부 분 들 을 복 사 하 는 데 충 분 한 메 모 리 를 할 당 할 수 없 다 .

버 그

커 널 의 2.1.97버 전 으 로 서 , CLONE_PID 플 래 그 는 사 용 되 어 서 는 안 된 다 . 왜 냐 하 면 , 커 널 의 다 른 부 분 들 과 대 부 분 의 시 스 템 소 프 트 웨 어 가 아 직 프 로 세 스 ID는 독 특 한 것 으 로 서 가 정 하 고 있 기 때 문 이 다 .

libc 버 전 5. libc 6 (a.k.a. glibc 2)가 제 공 하 는 __clone 에 대 한 항 목 이 없 다 . __clone 이 설 명 서 에 서 설 명 한 바 와 같 다 .

호 환

The __clone 호 출 은 리 눅 스 용 이 고 , 포 팅 할 의 도 를 지 닌 프 로 그 램 에 서 는 사 용 되 서 는 안 된 다 . 프 로 그 래 밍 쓰 레 드 가 능 한 어 플 리 케 이 션 에 대 해 서 , 리 눅 스 쓰 레 드 라 이 브 러 리 와 같 은 POSIX 1003.1c thread API를 구 현 하 는 라 이 브 러 리 를 사 용 하 는 것 이 좋 다 . pthread_create(3thr) 를 참 조 하 라 . 이 설 명 서 페 이 지 는 커 널 2.0.x 그 리 고 2.1.x, 그 리 고 glibc 2.0.x에 상 응 한 다 .

관 련 항 목

fork(2), pthread_create(3thr)

역 자

ASPLINUX<man [AT] asp-linux.kr>, 2000년 7월 29일