一个fork()系统调用的问题
2018-04-17 01:08
232 查看
fork()是做什么的请问man,fork()调用的返回值说明:
1. 在父进程中,fork返回新创建的子进程的pid;
2. 在子进程中,fork返回0;
3. 出错返回一个负值;
一个简单的测试:
执行结果如下:
四种结果,是不是有点糊涂,让我们修改下程序更直观的看调用:
getpid()是获取当前进程的id,getppid()是获取父进程的id,'\t'是为了格式化输出,这回输出结果是:
这回就可以直观的看到到底是哪个进程创建了哪个进程
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 }
这回就可以直观的看到到底是哪个进程创建了哪个进程
相关文章推荐
- 一个fork()系统调用的问题
- linux系统下 fork()系统调用: 关于父子进程缓存问题的小坑
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?
- 嵌入式IOEServer终于开发完成,相应的问题作一个系统阐述(WINCE)
- 调用自定义event时需要注意的一个问题
- 关于远程调用或调用web service的一个问题
- 完成了一个问题的解决 AJAX加入到分子项目的系统中
- VC调用Delphi写的dll的一个问题的处理
- java环境变量中的一个Bug还是系统的问题
- 一个如何终止系统进程的问题
- 如何调用MFC中的函数打开一个系统资源面板,获取文件
- 调用另外一个同名的重载函数漏掉括号出现的严重问题
- 一个关于.net下面的底层设备调用问题
- 嵌入式IOEServer终于开发完成,相应的问题作一个系统阐述(WINCE)
- 请教 一个关于双方调用的问题
- 解决一个系统启动过慢问题(软件服务启动错误影响)
- 刚遇到的一个C#中调用api,回调函数的问题
- 关于vb.net里面api Unicode/ANSI调用一个问题解答