라이브러리

[PHP] pcntl_wait - 포크된 자식의 상태를 기다리거나 반환합니다.




PCNTL_WAIT: 프로세스 동기화와 종료

PHP의 PCNTL 확장 기능은 프로세스 관리를 위한 다양한 함수를 제공합니다. `pcntl_wait()` 함수는 프로세스 동기화와 종료를 관리하는 데 사용됩니다.

pcntl_wait() 함수


`pcntl_wait()` 함수는 호출한 프로세스의 자식 프로세스를 기다립니다. 자식 프로세스가 종료되면 `pcntl_wait()` 함수는 자식 프로세스의 상태를 반환합니다. 만약 자식 프로세스가 아직 종료되지 않았다면 `pcntl_wait()` 함수는 0을 반환합니다.

# 예제 1: 자식 프로세스 기다리기


#hostingforum.kr
php

<?php

// 부모 프로세스

$pid = pcntl_fork();



if ($pid == -1) {

    die("fork() failed!");

} elseif ($pid) {

    // 부모 프로세스

    echo "부모 프로세스: 자식 프로세스 기다리기...
";

    pcntl_wait($status);

    echo "자식 프로세스 종료
";

} else {

    // 자식 프로세스

    echo "자식 프로세스: 종료되기 전...
";

    sleep(5);

    echo "자식 프로세스: 종료
";

    exit(0);

}

?>



이 예제에서는 부모 프로세스가 자식 프로세스를 기다리며, 자식 프로세스가 종료되면 부모 프로세스가 종료됩니다.

pcntl_waitpid() 함수


`pcntl_waitpid()` 함수는 `pcntl_wait()` 함수와 유사하지만, 자식 프로세스의 PID를 지정할 수 있습니다. 만약 자식 프로세스가 아직 종료되지 않았다면 `pcntl_waitpid()` 함수는 0을 반환합니다.

# 예제 2: 특정 자식 프로세스 기다리기


#hostingforum.kr
php

<?php

// 부모 프로세스

$pid1 = pcntl_fork();

$pid2 = pcntl_fork();



if ($pid1 == -1 || $pid2 == -1) {

    die("fork() failed!");

} elseif ($pid1) {

    // 부모 프로세스

    echo "부모 프로세스: 자식 프로세스 기다리기...
";

    pcntl_waitpid($pid2, $status);

    echo "자식 프로세스 2 종료
";

} elseif ($pid2) {

    // 자식 프로세스 2

    echo "자식 프로세스 2: 종료되기 전...
";

    sleep(5);

    echo "자식 프로세스 2: 종료
";

    exit(0);

} else {

    // 자식 프로세스 1

    echo "자식 프로세스 1: 종료되기 전...
";

    sleep(10);

    echo "자식 프로세스 1: 종료
";

    exit(0);

}

?>



이 예제에서는 부모 프로세스가 자식 프로세스 2를 기다리며, 자식 프로세스 2가 종료되면 부모 프로세스가 종료됩니다.

결론


`pcntl_wait()` 함수와 `pcntl_waitpid()` 함수는 프로세스 동기화와 종료를 관리하는 데 사용됩니다. `pcntl_wait()` 함수는 호출한 프로세스의 자식 프로세스를 기다리며, `pcntl_waitpid()` 함수는 특정 자식 프로세스를 기다립니다. 이 두 함수는 프로세스 관리에 중요한 역할을 합니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 10,077건 / 339 페이지

검색

게시물 검색