라이브러리 함수 자체에 대한 호출은 커널 모드로 전환되지 않으며(실행이 커널 모드에 없는 경우) 일반적으로 일반적인 서브루틴 호출입니다(예: 일부 명령 집합 아키텍처(ISA)에서 „CALL” 어셈블리 명령 사용). 실제 시스템 호출은 커널로 제어를 전송합니다(그리고 라이브러리 호출을 추상화하는 것보다 구현에 종속되고 플랫폼에 종속적입니다). 예를 들어, 유닉스와 같은 시스템에서 포크와 execve는 C 라이브러리 함수로, 포크 및 exec 시스템 호출을 호출하는 명령을 실행합니다. 응용 프로그램 코드에서 직접 시스템을 호출하는 것은 더 복잡하며 임베디드 어셈블리 코드를 사용해야 할 수 있으며(C 및 C++)에서 사용할 수 있을 뿐만 아니라 시스템 호출 작업에 대한 낮은 수준의 바이너리 인터페이스에 대한 지식이 필요할 수 있으며, 이는 시간이 지남에 따라 변경될 수 있습니다. 따라서 응용 프로그램 바이너리 인터페이스의 일부가 되지 않습니다. 라이브러리 함수는 이를 추상화하기 위한 것입니다. 컴퓨팅에서 시스템 호출은 컴퓨터 프로그램이 실행되는 운영 체제의 커널에서 서비스를 요청하는 프로그래밍 방식입니다. 여기에는 하드웨어 관련 서비스(예: 하드 디스크 드라이브 액세스), 새 프로세스 생성 및 실행, 프로세스 스케줄링과 같은 통합 커널 서비스와의 통신 등이 포함될 수 있습니다. 시스템 호출은 프로세스와 운영 체제 간의 필수 인터페이스를 제공합니다.

호출 스레드는 WaitForInputIdle 함수를 사용하여 새 프로세스가 초기화를 완료하고 입력 보류 중이 없는 사용자 입력을 기다리는 때까지 기다릴 수 있습니다. CreateProcess는 새 프로세스가 초기화를 완료할 때까지 기다리지 않고 반환되므로 부모 프로세스와 자식 프로세스 간의 동기화에 유용할 수 있습니다. 예를 들어 만들기 프로세스는 새 프로세스와 연결된 창을 찾기 전에 WaitForInputIdle을 사용합니다. 대부분의 시스템에서 시스템 호출은 사용자 공간 프로세스에서만 만들 수 있으며 일부 시스템에서는 OS/360 및 후속 시스템 코드와 같은 권한 있는 시스템 코드도 시스템 호출을 발급합니다. [1] 실행할 모듈의 이름입니다. 이 모듈은 Windows 기반 응용 프로그램일 수 있습니다. 로컬 컴퓨터에서 적절한 하위 시스템을 사용할 수 있는 경우 다른 유형의 모듈(예: MS-DOS 또는 OS/2)일 수 있습니다. lpApplicationName 매개 변수는 NULL일 수 있습니다. 이 경우 모듈 이름은 lpCommandLine 문자열의 첫 번째 공백 구분 토큰이어야 합니다. 공백이 포함된 긴 파일 이름을 사용하는 경우 인용된 문자열을 사용하여 파일 이름이 끝나는 위치와 인수가 시작되는 위치를 나타냅니다. 그렇지 않으면 파일 이름이 모호합니다.

예를 들어 문자열 „c:program 파일sub dirprogram 이름”을 생각해 보십시오. 이 문자열은 여러 가지 방법으로 해석될 수 있습니다. 시스템은 다음과 같은 순서로 가능성을 해석하려고 시도합니다. lpApplicationName에 대해 NULL을 전달하는 경우 아래 예제와 같이 lpCommandLine에서 실행 가능한 경로 주위에 따옴표를 사용합니다. 유닉스, 유닉스와 같은 다른 POSIX 호환 운영 체제에서 인기있는 시스템 호출은 열려 있습니다, 읽기, 쓰기, 닫기, 대기, exec, 포크, 종료, 및 종료. 대부분의 최신 운영 체제에는 수백 개의 시스템 호출이 있습니다. 예를 들어, 리눅스와 OpenBSD는 각각 300개 이상의 서로 다른 호출을 가지고 있습니다.[2][3] NetBSD는 500에 가깝습니다[4] FreeBSD는 500,[5] Windows 7에 가깝고 계획 9에는 51이 있습니다. [7] 응용 프로그램이 환경 블록을 제공하는 경우 시스템 드라이브의 현재 디렉터리 정보가 새 프로세스로 자동으로 전파되지 않습니다.