[c++] C++에서의 프로세스 간 신호 전달 방법

프로세스 간 통신은 다양한 방법으로 이뤄질 수 있습니다. 이를 위해 C++에서는 다양한 기술을 활용하여 다른 프로세스에게 신호를 보낼 수 있습니다. 이 포스트에서는 C++에서 프로세스 간 신호 전달의 여러 가지 방법을 살펴보겠습니다.

1. 시그널을 이용한 프로세스 간 통신

C++에서는 signal 라이브러리를 사용하여 프로세스 간 신호를 전달할 수 있습니다. 아래는 시그널을 이용한 간단한 예제 코드입니다.

#include <iostream>
#include <csignal>
#include <unistd.h>

void signalHandler(int signum) {
    std::cout << "Received signal " << signum << std::endl;
}

int main() {
    signal(SIGINT, signalHandler);

    while (1) {
        std::cout << "Running..." << std::endl;
        sleep(1);
    }

    return 0;
}

위 코드는 SIGINT 신호를 처리하는 signalHandler 함수를 등록하고, 계속해서 메시지를 출력하는 간단한 프로세스를 보여줍니다. 이 예제에서는 SIGINT 신호를 보내어 프로세스를 종료할 수 있습니다.

2. 프로세스 간 통신을 위한 파이프 사용

또 다른 방법은 파이프를 사용하여 프로세스 간 데이터를 주고받는 것입니다. 다음은 두 개의 프로세스 간에 데이터를 주고받는 간단한 예제 코드입니다.

#include <iostream>
#include <unistd.h>

int main() {
    int fd[2];
    pid_t pid;
    char buffer[256];

    if (pipe(fd) < 0) {
        std::cout << "Pipe failed" << std::endl;
        return 1;
    }

    pid = fork();

    if (pid < 0) {
        std::cout << "Fork failed" << std::endl;
        return 1;
    }

    if (pid > 0) {
        // Parent process
        close(fd[0]);
        write(fd[1], "Hello, child process!", 21);
        close(fd[1]);
    } else {
        // Child process
        close(fd[1]);
        read(fd[0], buffer, 21);
        std::cout << "Received: " << buffer << std::endl;
        close(fd[0]);
    }

    return 0;
}

위 코드는 pipe 함수를 사용하여 파이프를 생성하고, 부모 프로세스에서는 자식 프로세스로 데이터를 보내고, 자식 프로세스에서는 데이터를 받아 출력합니다.

3. 소켓을 이용한 프로세스 간 통신

마지막으로, 소켓을 이용하여 다른 프로세스와 통신할 수도 있습니다. 소켓을 이용한 프로세스 간 통신에 대한 상세한 내용은 파이썬이나 자바 등의 언어에서의 사용 방법과 유사하므로, 해당 언어의 문서를 참고하시기 바랍니다.

C++에서의 프로세스 간 통신은 다양한 방법으로 구현할 수 있으며, 이 글에서는 시그널, 파이프, 소켓을 이용한 방법을 살펴보았습니다. 해당 방법들을 적절히 활용하여 프로세스 간 데이터 교환 및 제어를 수행할 수 있습니다.

참고 자료: