fork wait 예제

위의 예는 그러나 몇 가지 미묘한 점을 놓친다: 우리는 둘 이상의 자식 프로세스가 종료되는 경우 알고, 다음 wait() 임의로 자식 프로세스를 수확하지만, 우리는 특정 자식 프로세스를 수확하려는 경우, 우리는 waitpid() 함수를 사용합니다. 아래와 같이 대기와 관련된 다른 시스템 호출이 있습니다. wait()의 실행은 두 가지 가능한 상황이 있을 수 있습니다. 하나의 자식 프로세스만 종료된 경우 wait() 반환 프로세스 ID를 반환합니다. 참고: “쓰기 시 복사” -> fork() 시스템 호출이 호출될 때마다 상위 프로세스와 관련된 모든 페이지(메모리)의 복사본이 만들어지고 자식 프로세스에 대한 운영 체제에서 별도의 메모리 위치에 로드됩니다. 그러나 모든 경우에 필요하지 는 않으며 일부 프로세스가 이 주소 공간 이나 메모리 영역에 쓰는 경우에만 필요할 수 있으며 별도의 복사본만 만들어지거나 제공됩니다. 시스템 호출 wait()는 간단합니다. 이 함수는 자식 프로세스 중 하나가 종료되거나 신호가 수신될 때까지 호출 프로세스를 차단합니다. 우리의 목적을 위해, 우리는 신호를 무시한다.

wait()는 정수 변수의 주소를 가져와 완료된 프로세스의 프로세스 ID를 반환합니다. 자식 프로세스의 완료 상태를 나타내는 일부 플래그는 정수 포인터를 통해 다시 전달됩니다. wait()의 주요 목적 중 하나는 자식 프로세스가 완료될 때까지 기다리는 것입니다. 참고로, 이 경우 `좀비`라는 단어는 실제로 무엇을 나타내는지 에 대한 약간의 빛을 발산합니다. 자식이 완료되거나 종료되면 커널 프로세스 테이블의 슬롯이 여전히 차지합니다. 또한 프로세스 ID, 종료 상태 등(즉, 원래 프로세스의 골격이 여전히 남아 있음)과 같이 종료된 프로세스에 대한 정보가 여전히 포함되어 있습니다. 자녀가 `대기`된 경우에만 슬롯을 사용할 수 있으며 나머지 정보는 부모가 액세스할 수 있습니다. 나는 리눅스 민트 19 XFCE의 가상 터미널에서 첫 번째 예제를 시도하고 오류를 생성 : l_fork.c:3 : 1 : 오류 : 알 수없는 유형 이름 `Int`; 당신은 `int`를 의미 했습니까? Int main(보이드) ^~~~int 참고: vfork는 복제의 특수 한 경우라고도 합니다. 다음 프로그램을 고려한다. 이 파일 fork-03.c의 사본을 다운로드하려면 여기를 클릭하십시오. wait() 호출은 자식 프로세스 중 하나가 종료되거나 신호가 수신될 때까지 호출 프로세스를 차단합니다.

자식 프로세스가 종료된 후 부모는 대기 시스템 호출 명령 후 실행을 계속합니다. wait() 시스템 호출은 자녀가 종료될 때까지 또는 신호가 전달될 때까지 현재 프로세스 또는 호출 신호 처리기를 종료할 때까지 대기() 시스템 호출로 인해 종료될 수 있습니다. Fork()는 자식 프로세스를 만들어 부모용과 자식에 대해 두 번 인쇄합니다. 당신이 볼 수 있듯이 “후 포크”인쇄 문 앞에 fork() 호출이 있습니다. 반환 값:- 자식 프로세스의 PID (프로세스 ID) 실행의 부모 스레드에서 반환 되 고 “0″ 자식의 실행 스레드에서 반환 됩니다. 다음은 포크 시스템 호출의 작동 방식을 설명하는 c-프로그래밍 예제입니다.

Comments are closed.