fork()是做什么的请问man,fork()调用的返回值说明:
1. 在父进程中,fork返回新创建的子进程的pid;
2. 在子进程中,fork返回0;
3. 出错返回一个负值;
一个简单的测试:
#include <iostream>
#include <unistd.h>
int main()
{
pid_t a1 = fork();
pid_t a2 = fork();
std::cout << "a1 = " << a1 << std::endl;
std::cout << "a2 = " << a2 << std::endl;
return 0;
}
执行结果如下:
a1 = 1397
a2 = 1398
a1 = 1397
a2 = 0
a1 = 0
a2 = 1399
a1 = 0
a2 = 0
四种结果,是不是有点糊涂,让我们修改下程序更直观的看调用:
#include <iostream>
#include <unistd.h>
int main()
{
pid_t a1 = fork();
pid_t a2 = fork();
std::cout << "{" << std::endl;
std::cout << "\tpid = " << getpid() << std::endl;
std::cout << "\tppid = " << getppid() << std::endl;
std::cout << "\ta1 = " << a1 << std::endl;
std::cout << "\ta2 = " << a2 << std::endl;
std::cout << "}" << std::endl;
wait(NULL);
return 0;
}
getpid()是获取当前进程的id,getppid()是获取父进程的id,'\t'是为了格式化输出,这回输出结果是:
{
pid = 1520
ppid = 1425
a1 = 1521
a2 = 1522
}
{
pid = 1522
ppid = 1520
a1 = 1521
a2 = 0
}
{
pid = 1521
ppid = 1520
a1 = 0
a2 = 1523
}
{
pid = 1523
ppid = 1521
a1 = 0
a2 = 0
}
这回就可以直观的看到到底是哪个进程创建了哪个进程