산란(컴퓨팅)
Spawn (computing)컴퓨팅에서 생성되는 기능은 새로운 자식 프로세스를 로드하고 실행하는 기능을 말한다.현재 프로세스는 아동이 종료될 때까지 기다리거나 동시 컴퓨팅을 계속 실행할 수 있다.새 하위 프로세스를 생성하려면 하위 프로세스와 현재 프로그램 모두가 실행할 수 있는 충분한 메모리가 필요하다.
DOS에는 마이크로소프트 윈도에 의해 계승되는 산란 기능 계열이 있다.
또한 POSIX 표준의 선택적 확장에 다른 종류의 산란 기능이 있다.[1]
DOS/Windows 생성 기능
DOS/Windows spaen 기능은 Unix function fork 및 exec에서 영감을 받았으나, 이러한 운영체제가 포크를 지원하지 않기 때문에 fork-exec 조합의 대체로서 spaen function이 제공되었다.[2]그러나, 가장 일반적인 사용 사례를 적절히 처리하지만, 실행 후 실행에서 살아남을 모든 프로세스 설정이 변경될 수 있기 때문에, 산란 기능은 포크 실행의 완전한 힘이 부족하다.그러나 대부분의 경우 이러한 결함은 보다 낮은 수준의 CreateProcess API를 사용하여 보완할 수 있다.
spawl, spawnlp, spav, spavp 호출에서 child process는 부모의 환경을 상속한다.호출이 발생할 때 열려 있는 파일은 하위 프로세스에서 열린 상태로 유지된다.
프로토타입
int spawnl(int mode, char *path, char *arg0, ...);int spawnle(int mode, char *path, char *arg0, ..., char ** envp);int spawnlp(int mode, char *path, char *arg0, ...);int spawnlpe(int mode, char *path, char *arg0, ..., char ** envp);int spawnv(int mode, char *path, char **argv);int spawnve(int mode, char *path, char **argv, char ** envp);int spawnvp(int mode, char *path, char **argv);int spawnvpe(int mode, char *path, char **argv, char ** envp);
함수 이름
각 기능의 기본 이름은 생성되며, 그 뒤에 하나 이상의 문자가 온다.
| 편지 | 메모들 |
|---|---|
| l | 명령줄 인수는 함수에 개별적으로 전달된다. |
| v | 명령줄 인수는 포인터 배열로 함수에 전달된다. |
| p | PATH 인수 변수를 사용하여 실행할 파일을 찾으십시오. |
| e | 환경 인수에 대한 일련의 포인터가 하위 프로세스에 명시적으로 전달된다. |
모드
모드 인수는 어린이가 실행되는 방법을 결정한다.모드에 대한 값은 다음과 같다.
| 이름 | 메모들 |
|---|---|
| P_Overlay | 상위 프로세스를 하위 프로세스와 오버레이하여 상위 프로세스를 파괴하십시오.이것은 실행* 기능과 동일한 효과를 가진다. |
| P_WAITY | 자식 프로세스가 실행(동기 발생)을 완료할 때까지 부모 프로세스를 일시 중단하십시오. |
| P_NOWAIT, P_NOWAITO | 새로운 프로세스(비동기 발생)와 동시에 호출 프로세스를 계속 실행한다. |
| P_DETACH | 아이는 콘솔이나 키보드에 접근하지 않고 백그라운드에서 실행된다._cawait on the new process(비동기식 발생)에 대한 호출이 실패함 |
경로
경로 인수는 실행할 프로그램의 파일 이름을 지정한다.spawnlp 및 spavp의 경우에만 파일 이름에 경로가 없고 현재 디렉터리에 없는 경우 PATH 환경 변수가 파일을 검색할 디렉터리를 결정한다.argv[0]가 가리키는 문자열은 실행할 프로그램의 이름이다.
산란 프로그램에 전달된 명령줄은 산란 호출에서 arg0 ~ argn 문자 문자열로 구성된다.이러한 문자열의 허용되는 최대 조합 길이는 디지털 마스의[3] 128자에서 Microsoft Visual C++[4]의 1024자 또는 메모리 허용량만큼의 컴파일러마다 다르다.[5]argn 이후의 마지막 인수는 NULL 포인터여야 한다.
아그브
argv 인수는 문자 포인터의 배열이다.목록의 끝을 나타내려면 배열의 마지막 포인터가 null이어야 한다.
부러워하다
산란, 산란, 산란, 산란 및 산란vpe 호출은 사용자가 환경 인수의 환경 설정 목록을 전달하여 하위 프로세스의 환경을 변경할 수 있도록 한다.이 인수는 일련의 문자 포인터로, 각 포인터(마지막 포인터 제외)는 환경 변수를 정의하는 null 종단 문자열을 가리킨다.환경변수의 형식은 다음과 같다.
이름=가치
여기서 이름은 변수 이름이고 값은 변수 값이다.배열의 마지막 포인터가 null이다.envp 인수가 null이면, 아이는 부모의 환경 설정을 상속한다.
Microsoft Windows에서 saem* 함수는 LoadModule을 사용하여 saemed 프로세스를 실행하며, 이것이 실패하면 정상적인 MS-DOS 프로세스를 생성하려고 시도한다.윈도우즈 응용 프로그램이 생성되는 경우 esx_instancehandleget을 사용하여 인스턴스 핸들을 얻을 수 있다._exec_showset, _exec_showget 및 _exec_showreset 기능을 사용하여 생성된 프로그램을 어떻게 표시할 것인지 지정할 수 있다.
반환 값
반환 값은 생성된 프로그램의 종료 상태를 나타낸다.값이 0이면 생성된 프로그램이 성공적으로 실행되었음을 나타낸다.양의 값은 생성된 프로그램이 실행되었지만 중단되거나 오류로 종료되었음을 나타내며 반환된 값은 하위 프로세스의 종료 상태임.음수 값은 생성된 프로그램이 실행되지 않았음을 나타내고 오류는 설정되지 않았음을 나타낸다.Microsoft Windows에서 spaen은 C 런타임 라이브러리와의 호환성을 위해 LoadModule에서 반환된 부정 오류 코드를 반환한다.다음과 같은 오류 코드가 발생할 수 있다.
| 가치 | 메모들 |
|---|---|
-2 | 파일을 찾을 수 없음 |
-3 | 경로를 찾을 수 없음 |
-11 | 잘못된 .exe 파일(Windows용) |
-13 | DOS 4. 0 적용 |
-14 | 알 수 없는 .exe 유형(DOS 확장 가능) |
POSIX 생성 기능
와 그 형제.posix_spawnp포크 및 Exec의 대체품으로 사용할 수 있지만, 사용과 같은 유연성을 제공하지 않는다.fork그리고exec따로따로그것들은 효율적인 대체품일 수 있다.fork그리고exec, 그러나 그들의 목적은 다음과 같은 임베디드 환경에서 프로세스 생성의 원시성을 제공하는 것이다.fork동적 주소 변환 부족으로 인해 지원되지 않음.
역사
알을 낳는 은유, 즉 난자 증착에서와 같이 자손을 생산하기 위한 은유는 VMS, 현재 오픈VMS, 운영체제 (1977년)에서 초기에 사용되었다.학계에서는 유닉스 포크(메모리 레이아웃의 크러스트 카피, 그러나 빠른)와 VMS의 산란(프로세스 매개변수의 신뢰할 수 있는 구성, 느린 구성) 사이에 활발한 논쟁이 있었다.이 논란은 VMS 산란 메커니즘이 윈도 NT(1993)에 계승되면서 부활했다.
참고 항목
참조
- ^ Posix.1-2008 saven.h
- ^ 적어도 Win32 API에서 Windows NT의 경우, Cygwin 또는 SFU do와 같은 POSIX 에뮬레이션 환경
- ^ 디지털 마스 공정.h
- ^ 마이크로소프트 MSDN
- ^ DJGPP 발생*
