进程间通信(IPC)全解析
1. 进程创建与同步问题
在进程编程中, fork()
函数常被用于从父进程创建子进程。以下是一个简单示例:
#include <unistd.h>
#include <iostream>
#include <sys/wait.h>
int main(void)
{
if (fork() != 0) {
std::cout << "parent\n";
wait(nullptr);
}
else {
std::cout << "child\n";
}
}
通常情况下,我们可能会看到先输出 parent
再输出 child
。这是因为操作系统启动子进程的时间可能比子进程输出内容的时间长。若让父进程执行时间变长,子进程就会先输出,如下例所示:
#include <unistd.h>
#include <iostream>
#include <sys/wait.h>
int main(void)
{
if (fork() != 0) {
sleep(1);
std::cout << "parent\n";
wait(nullptr);
}
else {