C++ 프로그래밍에서는 프로세스 관리를 위한 여러 가지 방법을 제공합니다. 이 글에서는 C++를 사용하여 프로세스를 실행, 관리 및 제어하는 방법에 대해 알아보겠습니다.
프로세스 생성
프로세스 제어
프로세스 생성
C++에서 새로운 프로세스를 생성하려면 fork
나 exec
과 같은 시스템 호출을 사용할 수 있습니다. POSIX 환경에서는 fork
와 exec
시스템 호출을 이용하여 새로운 프로세스를 생성하고 실행할 수 있습니다. Windows 환경에서는 CreateProcess
함수를 사용하여 새로운 프로세스를 생성할 수 있습니다.
다음은 POSIX 환경에서의 fork
및 exec
를 사용한 예시 코드입니다:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 자식 프로세스
execl("/bin/program", "program", NULL);
} else if (pid > 0) {
// 부모 프로세스
wait(NULL);
} else {
// fork 실패
}
return 0;
}
위 예시 코드에서 fork
를 사용하여 새로운 자식 프로세스를 생성하고, 자식 프로세스 내에서 execl
을 사용하여 새로운 프로그램을 실행하고 있습니다.
프로세스 제어
C++에서는 생성된 프로세스를 제어하고 통신하기 위한 여러 가지 방법이 있습니다. wait
나 waitpid
함수를 통해 자식 프로세스의 종료를 기다릴 수 있고, kill
함수를 통해 다른 프로세스를 종료시킬 수도 있습니다.
또한 파이프나 소켓을 이용하여 프로세스 간 통신을 할 수도 있습니다. 이를 통해 다른 프로세스와 데이터를 주고받거나 제어할 수 있습니다.
프로세스 간 통신 및 제어에 대한 예시 코드는 다음과 같습니다:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <iostream>
int main() {
int pipefd[2];
pid_t pid;
char buffer[5];
pipe(pipefd); // 파이프 생성
pid = fork();
if (pid == 0) {
// 자식 프로세스
close(pipefd[1]); // 쓰기용 파이프 닫기
read(pipefd[0], buffer, 5); // 파이프로부터 데이터 읽기
std::cout << "Received: " << buffer << std::endl;
close(pipefd[0]); // 읽기용 파이프 닫기
} else {
// 부모 프로세스
close(pipefd[0]); // 읽기용 파이프 닫기
write(pipefd[1], "hello", 5); // 파이프로 데이터 쓰기
close(pipefd[1]); // 쓰기용 파이프 닫기
}
return 0;
}
위 예시 코드에서는 파이프를 사용하여 부모 프로세스와 자식 프로세스 간에 데이터를 주고받고 있습니다.
프로세스 생성과 제어는 C++ 프로그램에서 중요한 부분이며, 위에서 설명한 방법들을 통해 프로세스를 생성하고 제어할 수 있습니다. 여러 시스템 호출 및 함수를 조합하여 프로세스 관리를 유연하게 할 수 있습니다.