在Linux中進行C++多進程編程,通常使用fork()
系統調用創建新的進程。以下是一個簡單的示例,展示了如何在C++中使用fork()
創建子進程:
#include <iostream>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork(); // 創建子進程
if (pid == -1) {
std::cerr << "Error: fork failed" << std::endl;
return 1;
} else if (pid == 0) {
// 子進程
std::cout << "Hello from child process! My PID is: " << getpid() << std::endl;
} else {
// 父進程
int status;
waitpid(pid, &status, 0); // 等待子進程結束
std::cout << "Hello from parent process! Child PID was: " << pid << std::endl;
}
return 0;
}
在這個示例中,我們首先調用fork()
函數創建一個新的進程。fork()
函數返回兩次:一次在父進程中,返回子進程的PID;另一次在子進程中,返回0。通過檢查fork()
的返回值,我們可以確定當前代碼是在父進程還是子進程中運行。
在子進程中,我們打印一條消息,包括子進程的PID。在父進程中,我們使用waitpid()
函數等待子進程結束,然后打印一條消息,包括子進程的PID。
要編譯并運行此示例,請將其保存為fork_example.cpp
,然后在終端中執行以下命令:
g++ -o fork_example fork_example.cpp
./fork_example
這將輸出類似以下內容:
Hello from child process! My PID is: 12345
Hello from parent process! Child PID was: 12345
請注意,這只是一個簡單的示例,實際應用中可能需要更復雜的進程間通信(IPC)機制,如管道、信號量、共享內存等。這些IPC機制可以幫助父進程和子進程之間傳遞數據和同步操作。