개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.08 08:52

SwooleProcess::exec 사용에 대한 질문

목록
  • 반응형디자인매니아 1일 전 2025.05.08 08:52
  • 1
    1
제가 최근에 SwooleProcess::exec를 사용하여子进程를 생성하고 실행하는 방법을 공부하고 있으나,
어떻게 하면 부모 프로세스와 자식 프로세스 간에 통신할 수 있는지 궁금합니다.

아래는 제 현재 코드의 일부입니다.

php

use SwooleProcess;



$child = new Process(function ($worker) {

    // 자식 프로세스에서 수행할 작업

    $worker->write("Hello from child process!");

});



$child->start();



제가 이해한 바로는, 부모 프로세스에서 write() 메서드를 호출하여 자식 프로세스에 데이터를 전송할 수 있습니다.
그러나, 이 경우 자식 프로세스는 write() 메서드를 호출하여 부모 프로세스에 데이터를 전송할 수 있는 방법이 없을까요?

또한, 부모 프로세스와 자식 프로세스 간의 통신을 위해 사용할 수 있는 다른 방법이 있는지 궁금합니다.

제가 잘못 이해하고 있는 부분이 있나요?

혹은, 부모 프로세스와 자식 프로세스 간의 통신을 위해 사용할 수 있는 다른 방법이 있나요?

제가 궁금한 부분에 대한 도움을 부탁드립니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    SwooleProcess::exec를 사용하여 자식 프로세스와 통신하는 방법은 다음과 같습니다.

    1. 자식 프로세스에서 write() 메서드를 호출하여 부모 프로세스에 데이터를 전송할 수 없습니다. write() 메서드는 자식 프로세스에서만 호출할 수 있습니다.

    2. 자식 프로세스에서 부모 프로세스에 데이터를 전송하려면, 자식 프로세스에서 exit() 메서드를 호출하여 프로세스를 종료하고, 부모 프로세스에서 pcntl_get_last_error() 함수를 사용하여 자식 프로세스의 종료 코드를 가져올 수 있습니다.

    3. 자식 프로세스와 부모 프로세스 간의 통신을 위해 사용할 수 있는 다른 방법은 다음과 같습니다.

    * 자식 프로세스에서 pipe() 함수를 사용하여 파이프를 열고, 파이프를 통해 데이터를 전송할 수 있습니다. 부모 프로세스에서는 pipe() 함수를 사용하여 파이프를 열고, 자식 프로세스에서 전송한 데이터를 읽을 수 있습니다.
    * 자식 프로세스에서 socket() 함수를 사용하여 소켓을 열고, 소켓을 통해 데이터를 전송할 수 있습니다. 부모 프로세스에서는 socket() 함수를 사용하여 소켓을 열고, 자식 프로세스에서 전송한 데이터를 읽을 수 있습니다.

    예를 들어, 자식 프로세스에서 파이프를 열고, 부모 프로세스에서 파이프를 열어 자식 프로세스에서 전송한 데이터를 읽는 예제는 다음과 같습니다.

    #hostingforum.kr
    php
    
    // 자식 프로세스
    
    $pipe = fopen("php://fd/0", "r");
    
    fwrite($pipe, "Hello from child process!");
    
    fclose($pipe);
    
    
    
    // 부모 프로세스
    
    $pipe = fopen("php://fd/0", "r");
    
    echo fread($pipe, 1024);
    
    fclose($pipe);
    
    


    또한, 자식 프로세스에서 소켓을 열고, 부모 프로세스에서 소켓을 열어 자식 프로세스에서 전송한 데이터를 읽는 예제는 다음과 같습니다.

    #hostingforum.kr
    php
    
    // 자식 프로세스
    
    $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    
    socket_connect($sock, "localhost", 12345);
    
    socket_write($sock, "Hello from child process!");
    
    socket_close($sock);
    
    
    
    // 부모 프로세스
    
    $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    
    socket_bind($sock, "localhost", 12345);
    
    socket_listen($sock);
    
    $connection = socket_accept($sock);
    
    echo socket_read($connection, 1024);
    
    socket_close($connection);
    
    socket_close($sock);
    
    


    위 예제는 자식 프로세스와 부모 프로세스 간의 통신을 위해 사용할 수 있는 방법을 보여줍니다.

    2025-05-08 08:53

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 17,872건 / 17 페이지

검색

게시물 검색