{{위키데이터 속성 추적}}
{{소문자}}
'''process.h'''는 스레드와 프로세스 작업에 쓰이는 함수 정의와 매크로가 포함된 C 언어의 [[헤더 파일]]이다. [[ANSI C|ANSI/ISO C]]나 [[POSIX]] 표준에서는 헤더 파일 또는 함수가 구현되어 있지 않다. 수많은 C 컴파일러는 [[도스]], [[윈도우 3.1x]], [[윈도우 API|Win32]], [[OS/2]], [[넷웨어]], [[도스 익스텐더]]에 적용할 자신의 라이브러리의 헤더 파일과 라이브러리 함수에 타겟이 맞춰져 있다.

== 역사 ==
첫 파일 참조는 1986년 10월 26일에 돌아간 Net.Micro.PC 유즈넷의 포스트에 있다.<ref name="msft process.h">[http://groups-beta.google.com/group/net.micro.pc/browse_frm/thread/b85ef1946a4915e6/1154bb52be4d5854?lnk=st&q=%22process%5C.h%22&rnum=23#1154bb52be4d5854 First reference to process.h]{{깨진 링크|url=http://groups-beta.google.com/group/net.micro.pc/browse_frm/thread/b85ef1946a4915e6/1154bb52be4d5854?lnk=st&q=%22process%5C.h%22&rnum=23 }}, groups-beta.google.com</ref> 컴파일러는 마이크로소프트 C 컴파일러 3.0 버전에 사용되었다. Lattice C 컴파일러 3.30 (1988년 8월 24일)은 헤더 파일을 갖지 않고, 유사한 함수가 제공된다. 볼랜드에서는 헤더 파일이 [[터보 C]] 컴파일러 2.01 버전에서 제공된다. C 웨어-퍼스널 C 컴파일러 1.2c 버전 (6월 1989)는 ANSI 헤더 파일만을 갖는다.

== 멤버 함수 ==
{| class="wikitable"
|-
! 이름||내용||적용 운영 체제
|-
| <code>[[exec (운영 체제)|execl, execle, execlp, execlpe]]</code>||부모 프로세스가 이전에 할당받은 메모리에 위치한 자식 프로세스를 로드하고 [[실행 (컴퓨팅)|실행]]한다. 개별적으로 매개변수를 들어간다.||DOS,Win,OS/2,POSIX
|-
| <code>[[exec (운영 체제)|execv, execve, execvp, execvpe]]</code>||부모 프로세스가 이전에 할당받은 메모리에 위치한 새 자식 프로세스를 로드하고 [[실행 (컴퓨팅)|실행]]한다. 매개변수는 포인터의 배열로 들어간다.||DOS,Win,OS/2,POSIX
|-
| <code>[[spawn (컴퓨팅)|spawnl, spawnle, spawnlp, spawnlpe]]</code>||자식 프로세스를 로드하고 실행한다. 개별적으로 매개변수를 들어간다.||DOS,Win,OS/2
|-
| <code>[[spawn (컴퓨팅)|spawnv, spawnve, spawnvp, spawnvpe]]</code>||새 자식 프로세스를 로드하고 실행한다. 매개변수는 포인터의 배열로 들어간다.||DOS,Win,OS/2
|-
| <code>[[beginthread|beginthread, beginthreadNT]]</code>||현재 프로세스 동안 실행에 관한 새 스레드를 만든다.||Win,OS/2
|-
| <code>[[endthread|endthread]]</code>||<code>beginthread</code>로 만들어진 프로세스를 종료한다.||Win,OS/2
|-
| <code>[[getpid|getpid]]</code>||[[프로세스 식별자]]를 반환한다.||DOS,Win,OS/2
|-
| <code>[[cexit|cexit]]</code>||시작 코드에 의해 변경된 인터럽트 벡터를 원래대로 되돌린다.||DOS,Win,OS/2
|-
|}

== 멤버 상수 ==
{| class="wikitable"
|-
! 이름||내용||비고||운영 체제
|-
| <code>_P_WAIT</code>||자식 프로세스가 실행이 끝날 때까지 부모 프로세스를 차단한다.||동기 스폰.||MS-DOS,Win32,OS/2
|-
| <code>_P_NOWAIT, _P_NOWAITO</code>||동시에 호출된 프로세스를 새 프로세스에 실행 하는 것을 계속한다.||비동기 스폰 ||Win32,OS/2
|-
| <code>_P_OVERLAY</code>||부모 프로세스가 자식 프로세스에 덮어쓰기 할 경우, 부모 프로세스를 강제 종료한다.||<code>exec*</code> 함수와 같은 효과를 가진다.||MS-DOS,Win32,OS/2
|-
| <code>_P_DETACH</code>||콘솔이나 키보드로 액세스하지 않고 자식이 백그라운드에서 실행된다.||새 프로세스가 실패하는 동시에 <code>_cwait</code>를 호출한다. 비동기 스폰.||Win32,OS/2
|-
| <code>_WAIT_CHILD</code>||<code>cwait</code> 동작에 사용된다.||Win32에는 쓰이지 않는다.||MS-DOS,OS/2
|-
| <code>_WAIT_GRANDCHILD</code>||<code>cwait</code> 동작에 사용된다.||Win32에는 쓰이지 않는다.||MS-DOS,OS/2
|-
|}

== 구현 ==
어떤 표준도 없이 구현된 것을 감안하여 각 컴파일러의 헤더 파일에 따라 사용해야 한다. 아래는 process.h을 지원하는 컴파일러 목록이다.

* DJGPP<ref>[http://www.delorie.com/djgpp/ Delorie.com]</ref><ref name="djgpp process.h">[http://www.delorie.com/djgpp/doc/incs/process.h DJGPP process.h], delorie.com</ref>
* 오픈왓컴(OpenWatCom)<ref>{{웹 인용 |url=http://www.openwatcom.org/index.php/Main_Page |제목=Openwatcom.org |확인날짜=2015년 3월 17일 |보존url=https://web.archive.org/web/20150317091931/http://www.openwatcom.org/index.php/Main_Page |보존날짜=2015년 3월 17일 |url-status=dead }}</ref><ref name="watcom clib">[http://www.openwatcom.org/ftp/manuals/clib.pdf OpenWatcom clib] {{웨이백|url=http://www.openwatcom.org/ftp/manuals/clib.pdf |date=20061011042009 }}, openwatcom.org</ref>
* 디지털 마르스<ref>[http://www.digitalmars.com/ DigitalMars.com]</ref><ref name="mars process.h">[http://www.digitalmars.com/rtl/process.html Digital Mars process.h], digitalmars.com</ref>
* MinGW<ref>{{웹 인용 |url=http://www.mingw.org/ |제목=MinGW.org |확인날짜=2011-02-19 |archive-date=2006-08-28 |archive-url=https://web.archive.org/web/20060828091046/http://www.mingw.org/MinGWiki/index.php/GettingStarted }}</ref>
* [[비주얼 C++|마이크로소프트 비주얼 C++]]<ref>{{웹 인용 |url=http://msdn.microsoft.com/vstudio/express/visualc/default.aspx# |제목=MSDN.Microsoft.com |확인날짜=2011-02-19 |보존url=https://web.archive.org/web/20070707082306/http://msdn.microsoft.com/vstudio/express/visualc/default.aspx# |보존날짜=2007-07-07 |url-status=dead }}</ref>
* [[터보 C|볼랜드 터보 C]], 2.0 이후 버전<ref>{{웹 인용 |url=http://www.borland.com/ |제목=Borland.com |확인날짜=2012년 11월 5일 |보존url=https://web.archive.org/web/20121105211827/http://www.borland.com/ |보존날짜=2012년 11월 5일 |url-status=dead }}</ref><ref name="turboc 2.0">[http://dn.codegear.com/article/20841Turbo C version 2.01]{{깨진 링크|url=http://dn.codegear.com/article/20841Turbo }}, dn.codegear.com</ref>
* Lcc32<ref>[http://www.cs.virginia.edu/~lcc-win32/ CS.Virginia.edu]</ref>
* QNX Neutrino QCC 6.x<ref>[http://www.qnx.com/products/neutrino_rtos/ QNX.com]</ref>

== 차이점 ==
한편 exec*와 spawn* 매개변수의 혼합 길이가 변경될 수도 있다.
* Delorie DJGPP : 제한을 가지지 않는다.<ref name="djgpp spawn">[http://www.delorie.com/djgpp/doc/libc/libc_736.html DJGPP spawn*], delorie.com</ref>
* 디지털 마르스 : 최댓값이 128바이트이며 '\0' 문자로 끝내야 될 필요는 없다.
* 마이크로소프트 비주얼 C++ : 새 프로세스의 매개변수는 반드시 1024 바이트를 넘지 않아야 된다.<ref name="msdn">[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/HTML/_crt_system.2c_._wsystem.asp Microsoft MSDN], msdn.microsoft.com</ref>

== 참조 ==
<references />

== 외부 링크 ==
* [http://www.digitalmars.com/rtl/process.html#_exec Digital Mars _exec reference]

[[분류:Process.h| ]]
[[분류:C 라이브러리]]