linux 进程 fork wait函数

fork:创建子进程

wait:父进程等待子进程结束,并销毁子进程,如果父进程不调用wait函数,子进程就会一直留在linux内核中,变成了僵尸进程。

fork函数的详细说明:fork

wait函数详细说明参考:wait

例子1:不注释掉exit(0)的话,子进程不会执行到printf("end pid: %d\n", getpid());这行。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <wait.h>//wait functionint main(){pid_t pid;pid = fork();if(pid == 0){printf("child process : %d\n", getpid());//exit(0);}else{int status;pid_t waitpid;printf("parent process : childpid=%d , mypid=%d\n",pid, getpid());waitpid = wait(&status);printf("waitpid:%d\n", waitpid);}printf("end pid: %d\n", getpid());return 0;
}

github源代码

例子2:父进程和子进程之间,值是不共有的,你是你的,我是我的。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>int main(){pid_t pid;int i = 100;pid = fork();if(pid == 0){printf("child process : %d\n", getpid());i += 500;}else{printf("parent process : childpid=%d , mypid=%d\n",pid, getpid());i += 1024;}printf("i=%d\n", i);return 0;
}

github源代码

例子3:线程之间,值是共有的。

#include <stdio.h>
#include <unistd.h>//sleep function
#include <pthread.h>int global_val = 0;void* sub_thread(void *data){int* val = (int*)data;printf("sub_thread : val=%d\n", *val);for(int i = 0; i < 10; ++i){global_val++;printf("sub_thread : i=%d, g=%d\n", i, global_val);sleep(1);}return NULL;
}int main(){pthread_t th;void* th_ret;int arg = 200;if(pthread_create(&th, NULL, sub_thread, (void*)&arg) != 0){perror("pthread_create");return 1;}for(int i = 0; i < 10; ++i){global_val++;printf("main: i=%d, g=%d\n", i, global_val);sleep(1);}if(pthread_join(th, &th_ret) != 0){perror("pthread_join");return 1;}return 0;
}

github源代码

编译时需要加 -pthread

g++ -g process-5-thread.cpp -std=c++11 -pthread

c/c++ 学习互助QQ群:877684253

本人微信:xiaoshitou5854

转载于:https://www.cnblogs.com/xiaoshiwang/p/9808278.html

c/c++ linux 进程 fork wait函数相关推荐

  1. Linux进程 exec族函数(execl,execlp,execle,execv,execvp,execcvpe)

    exec族函数的作用 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序.因为调用exec函数并不创建新进程,所以前 ...

  2. linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)

    原文链接:https://blog.csdn.net/u014530704/article/details/73848573 exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程 ...

  3. 10.linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)

    1.exec族函数函数的作用: 1.exec族函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序.因为 ...

  4. Linux进程 excel族函数的用法

    介绍 使用fork创建一个进程之后,经常会在新进程中调用exec函数执行别的程序 当前进程调用exec函数之后,这个进程会被完全替代换成新的程序,即便如此仍然是同一个进程,进程ID不变 函数族 exe ...

  5. Linux进程的创建函数fork()及其fork内核实现解析

    进程的创建之fork() Linux系统下,进程可以调用fork函数来创建新的进程.调用进程为父进程,被创建的进程为子进程. fork函数的接口定义如下: #include <unistd.h& ...

  6. linux进程---exec族函数(execl, execlp, execv, execvp, )解释和配合fork的使用

    exec族函数函数的作用:         exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件.这里的可执行文件既可以是二 ...

  7. Linux进程—exec族函数 execl, execlp, execle, execv, execvp

    exec族函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec族函数去执行新的程序:当该进程调用exec族函数时,该进程被替代为新程序,因为exec族函数并不创建新进程,所以前后 ...

  8. linux进程--fork详解(三)

    1.fork 首先我们先来回忆一下fork()函数: 函数头文件:#include<unistd.h> 函数原型:pid_t fork(void);其中pid_t是一个宏定义:#defin ...

  9. linux进程--fork详解(二)

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  10. linux进程通信 --ftok函数

    ftok函数 作用:系统建立IPC通讯 (消息队列.信号量和共享内存) 时必须指定一个ID值.通常情况下,该id值通过ftok函数得到. 原型: #include <sys/types.h> ...

最新文章

  1. 大写的服!用耳朵也能写代码?盲人程序员自学编程成为全栈工程师
  2. oracle的结构是什么,Oracle的软件结构是什么呢?
  3. 洛谷P2826 [USACO08NOV]光开关Light Switching [2017年6月计划 线段树02]
  4. 基于TCP实现双向通信对话功能
  5. 知乎上已获千赞,全网独家首发!
  6. 复杂高端木马USB窃贼出现
  7. UVA11428 Cubes【数学+二分】
  8. java接口自行车例题_java接口相关例题
  9. icesat-2 数据产品
  10. 钉钉日志范文100篇_钉钉工作日记(模板一)
  11. riot修改服务器,riot改地区教程
  12. JAVA整合无忧代理IP做数据采集的DEMO
  13. 中心极限定理 - 正态分布
  14. 用计算机算sin的按键顺序是什么,用计算器求sin50°的值,按键顺序是 [ ]A.B.C.D....
  15. VulkanAPI架构
  16. flutter插件开发学习之旅(4)-------检测GPS状态,打开GPS和显示经纬度实战
  17. Spreadtrum_Android_8805和8810环境搭建和源码编译V1.0.1_Word文档
  18. 大佬们当年是怎样熬过资本寒冬的?
  19. 大数据应用安全研究报告
  20. 拿下18Koffer,黑马老学长分享了4点学习建议!

热门文章

  1. VC++6.0环境下调试c语言代码的方法和步骤_附图
  2. 《精通LabVIEW虚拟仪器程序设计与案例实现》一2.1 LabVIEW安装
  3. GitLab 9提供了子群组、部署面板和集成监控
  4. nodejs的一些日常操作
  5. 您无权查看或编辑目前的权限设置;但是,您可以取得所有权或更改审核设置
  6. MSMTP+MUTT轻松实现服务器资源监控
  7. 【Notepad】Notepad++常用快捷键总结
  8. 稳的一比,鸿蒙系统霸榜Github!
  9. 看看华为 Java 编程的军规...
  10. 真正优秀的人是如何度过假期的