[c++] C++로 리눅스 프로세스 관리 및 제어

리눅스에서 프로세스를 생성하고 관리하는 것은 C++로도 가능합니다. 이번 포스트에서는 C++를 사용하여 리눅스에서 프로세스를 생성하고 제어하는 방법을 살펴보겠습니다.

프로세스 생성하기

새로운 프로세스를 만들기 위해서는 fork() 함수를 사용합니다. 이 함수는 현재의 프로세스를 복제하여 새로운 프로세스를 만듭니다.

다음은 간단한 C++ 코드 예제입니다.

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

int main() {
    pid_t pid = fork();
    
    if (pid == 0) {
        // 자식 프로세스 코드
        std::cout << "자식 프로세스" << std::endl;
    } else if (pid > 0) {
        // 부모 프로세스 코드
        std::cout << "부모 프로세스" << std::endl;
    } else {
        // 에러 처리
        std::cerr << "프로세스 생성 실패" << std::endl;
        return 1;
    }

    return 0;
}

위 코드는 fork() 함수를 사용하여 새로운 프로세스를 생성하고, 부모 프로세스와 자식 프로세스 각각에서 메시지를 출력합니다.

프로세스 제어하기

새로운 프로세스를 생성했다면, 이제 해당 프로세스를 제어할 수 있습니다. 예를 들어, exec() 계열의 함수를 사용하여 새로운 프로그램을 실행하거나, kill() 함수를 사용하여 프로세스를 종료할 수 있습니다.

다음은 exec() 함수를 사용하여 새로운 프로그램을 실행하는 예제입니다.

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

int main() {
    pid_t pid = fork();
    
    if (pid == 0) {
        // 자식 프로세스 코드
        char *args[] = {"/bin/ls", "-l", NULL};
        execvp(args[0], args);
    } else if (pid > 0) {
        // 부모 프로세스 코드
        std::cout << "부모 프로세스" << std::endl;
    } else {
        // 에러 처리
        std::cerr << "프로세스 생성 실패" << std::endl;
        return 1;
    }

    return 0;
}

위 코드는 execvp() 함수를 사용하여 /bin/ls -l 명령어를 실행하는 예제입니다.

프로세스를 종료하려면 kill() 함수를 사용할 수 있습니다. 예를 들어, 다음은 특정 프로세스를 종료하는 코드 예제 입니다.

#include <iostream>
#include <signal.h>

int main() {
    // 프로세스 ID 입력
    int pid;
    std::cout << "종료할 프로세스 ID를 입력하세요: ";
    std::cin >> pid;

    // 프로세스 종료
    if (kill(pid, SIGKILL) == 0) {
        std::cout << "프로세스를 종료했습니다." << std::endl;
    } else {
        std::cerr << "프로세스 종료 실패" << std::endl;
    }

    return 0;
}

위 코드는 kill() 함수를 사용하여 입력받은 프로세스 ID에 해당하는 프로세스를 종료하는 예제입니다.

요약

C++를 사용하여 리눅스에서 프로세스를 생성하고 제어하는 방법을 살펴보았습니다. fork() 함수를 사용하여 새로운 프로세스를 생성하고, exec() 함수와 kill() 함수를 사용하여 프로세스를 실행하거나 종료할 수 있습니다.

프로세스 관리 및 제어에 대한 더 많은 정보는 리눅스 맨 페이지를 참조할 수 있습니다.

이상으로 C++로 리눅스 프로세스 관리 및 제어에 대한 간략한 소개를 마치겠습니다. 감사합니다.