c/c++ linux 进程 fork wait函数
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函数相关推荐
- Linux进程 exec族函数(execl,execlp,execle,execv,execvp,execcvpe)
exec族函数的作用 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序.因为调用exec函数并不创建新进程,所以前 ...
- linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)
原文链接:https://blog.csdn.net/u014530704/article/details/73848573 exec族函数函数的作用: 我们用fork函数创建新进程后,经常会在新进程 ...
- 10.linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)
1.exec族函数函数的作用: 1.exec族函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序.当进程调用exec函数时,该进程被完全替换为新程序.因为 ...
- Linux进程 excel族函数的用法
介绍 使用fork创建一个进程之后,经常会在新进程中调用exec函数执行别的程序 当前进程调用exec函数之后,这个进程会被完全替代换成新的程序,即便如此仍然是同一个进程,进程ID不变 函数族 exe ...
- Linux进程的创建函数fork()及其fork内核实现解析
进程的创建之fork() Linux系统下,进程可以调用fork函数来创建新的进程.调用进程为父进程,被创建的进程为子进程. fork函数的接口定义如下: #include <unistd.h& ...
- linux进程---exec族函数(execl, execlp, execv, execvp, )解释和配合fork的使用
exec族函数函数的作用: exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件.这里的可执行文件既可以是二 ...
- Linux进程—exec族函数 execl, execlp, execle, execv, execvp
exec族函数的作用: 我们用fork函数创建新进程后,经常会在新进程中调用exec族函数去执行新的程序:当该进程调用exec族函数时,该进程被替代为新程序,因为exec族函数并不创建新进程,所以前后 ...
- linux进程--fork详解(三)
1.fork 首先我们先来回忆一下fork()函数: 函数头文件:#include<unistd.h> 函数原型:pid_t fork(void);其中pid_t是一个宏定义:#defin ...
- linux进程--fork详解(二)
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...
- linux进程通信 --ftok函数
ftok函数 作用:系统建立IPC通讯 (消息队列.信号量和共享内存) 时必须指定一个ID值.通常情况下,该id值通过ftok函数得到. 原型: #include <sys/types.h> ...
最新文章
- 大写的服!用耳朵也能写代码?盲人程序员自学编程成为全栈工程师
- oracle的结构是什么,Oracle的软件结构是什么呢?
- 洛谷P2826 [USACO08NOV]光开关Light Switching [2017年6月计划 线段树02]
- 基于TCP实现双向通信对话功能
- 知乎上已获千赞,全网独家首发!
- 复杂高端木马USB窃贼出现
- UVA11428 Cubes【数学+二分】
- java接口自行车例题_java接口相关例题
- icesat-2 数据产品
- 钉钉日志范文100篇_钉钉工作日记(模板一)
- riot修改服务器,riot改地区教程
- JAVA整合无忧代理IP做数据采集的DEMO
- 中心极限定理 - 正态分布
- 用计算机算sin的按键顺序是什么,用计算器求sin50°的值,按键顺序是 [ ]A.B.C.D....
- VulkanAPI架构
- flutter插件开发学习之旅(4)-------检测GPS状态,打开GPS和显示经纬度实战
- Spreadtrum_Android_8805和8810环境搭建和源码编译V1.0.1_Word文档
- 大佬们当年是怎样熬过资本寒冬的?
- 大数据应用安全研究报告
- 拿下18Koffer,黑马老学长分享了4点学习建议!
热门文章
- VC++6.0环境下调试c语言代码的方法和步骤_附图
- 《精通LabVIEW虚拟仪器程序设计与案例实现》一2.1 LabVIEW安装
- GitLab 9提供了子群组、部署面板和集成监控
- nodejs的一些日常操作
- 您无权查看或编辑目前的权限设置;但是,您可以取得所有权或更改审核设置
- MSMTP+MUTT轻松实现服务器资源监控
- 【Notepad】Notepad++常用快捷键总结
- 稳的一比,鸿蒙系统霸榜Github!
- 看看华为 Java 编程的军规...
- 真正优秀的人是如何度过假期的