fork wait 예제

결국 커널 프로세스 테이블에 새 프로세스를 만들 공간이 부족합니다. 따라서 fork()는 실패하고 시스템을 사용하기 어렵게 / 불가능하게 만들 수 있습니다 – 예를 들어 로그인하면 새로운 프로세스가 필요합니다! 그들을 기다리지 마십시오! 상위 프로세스는 자식 프로세스를 기다릴 필요 없이 코드를 계속 실행할 수 있습니다. 실제로 백그라운드 프로세스는 exec을 호출하기 전에 열린 파일 설명자에서 닫아 서 부모의 입력 및 출력 스트림에서 연결을 끊을 수도 있습니다. 먼저 컨텍스트 전환은 사용자 모드에서 커널(시스템) 모드로 전환됩니다. 이것은 우리가 사용하는 프로세스 우선 순위 및 유닉스 / 리눅스 운영 체제를 기반으로합니다. 위의 C 예제 코드에서 컨텍스트의 항목인 “{” 열기 중괄호를 사용하고 있으며 “}” 닫는 곱슬 교정기는 컨텍스트를 종료하기 위한 것입니다. 다음 표는 컨텍스트 전환을 매우 명확하게 설명합니다. c 언어의 구문: pid_t waitpid(child_pid, 상태, 옵션); 이렇게 하면 구문 및 필요한 모든 세부 정보와 함께 사용되는 포크가 무엇인지 언급하는 출력이 생성됩니다. Fork 시스템 호출은 pid(프로세스 ID) 및 ppid(상위 프로세스 ID)에서만 상위 프로세스와 다른 자식을 만듭니다. 리소스 사용률이 0으로 설정됩니다. 파일 잠금 및 보류 중인 신호는 상속되지 않습니다.

(리눅스에서 “포크”는 “복사 – 온 – 쓰기()”로 구현됩니다). wait() 호출은 자식 프로세스 중 하나가 종료되거나 신호가 수신될 때까지 호출 프로세스를 차단합니다. 자식 프로세스가 종료된 후 부모는 대기 시스템 호출 명령 후 실행을 계속합니다. 위의 예제에서는 wait() 실행이 두 가지 가능한 상황이 있을 수 있습니다. Vfork() 행동은 아래 프로그램에서 자세히 설명합니다. 각 프로세스는 자식에게 복사되는 환경 변수의 자체 사전을 가져옵니다. 즉, 부모가 환경 변수를 변경하면 자식으로 전송되지 않으며 그 반대의 경우도 마찬가지입니다. 이것은 부모 (또는 다른 프로세스)와 다른 환경 변수가있는 프로그램을 exec하려는 경우 fork-exec-wait 부작에서 중요합니다. 포크 시스템 호출에 사용되는 구문은 아래와 같이 wait() 시스템 호출은 자식이 종료될 때까지 또는 신호가 전달될 때까지 현재 프로세스의 실행을 일시 중단합니다.

그러나 부모는 모든 자식 프로세스를 만든 후 즉시 기다릴 필요가 없습니다. 그것은 몇 가지 다른 작업을 할 수 있습니다. 다음은 예제입니다. 이 파일 포크-04.c에 대 한 여기를 클릭 하십시오. 어떤 프로세스에 자식 프로세스가 없는 경우 wait() 즉시 “-1″로 반환합니다. 참고: “쓰기 시 복사” -> fork() 시스템 호출이 호출될 때마다 상위 프로세스와 관련된 모든 페이지(메모리)의 복사본이 만들어지고 자식 프로세스에 대한 운영 체제에서 별도의 메모리 위치에 로드됩니다. 그러나 모든 경우에 필요하지 는 않으며 일부 프로세스가 이 주소 공간 이나 메모리 영역에 쓰는 경우에만 필요할 수 있으며 별도의 복사본만 만들어지거나 제공됩니다.

Sorry, comments are closed for this post.