linux fork多进程 demo

注释

  • 使用系统调用fork()创建三个子进程;
  • 各个子进程显示和输出一些提示信息和自己的进程标识符;
  • 父进程显示自己的进程ID和一些提示信息,然后调用waitpid()等待多个子进程结束,并在子进程结束后显示输出提示信息表示程序结束。

代码

#include <iostream>
#include <unistd.h>
#include <cstdarg>
#include <wait.h>
#include "crypto_util.h"int get_file(const std::string file_name){size_t get_file_id = 0;std::cout << hsm::common::get_md5_digest_hex(file_name) << std::endl;get_file_id = strtol(reinterpret_cast<const char *>(hsm::common::get_md5_digest_hex(file_name).substr(0,7).c_str()), nullptr, 16);return get_file_id;
}
int tprintf(const char *fmt,...){va_list args;struct tm* t_struct;time_t t_sec;t_sec = time(nullptr);t_struct = localtime(&t_sec);printf("%02d:%02d:%02d:%5d|",t_struct->tm_hour,t_struct->tm_min,t_struct->tm_sec,getpid());va_start(args,fmt);return vprintf(fmt,args);
}
int main(void) {std::cout << "Start!" << std::endl;printf("Father progress,PID is %d.\n",getpid());pid_t pid1 = fork();if(pid1 == 0){printf("Children progress 1,PID is %d.\n",getpid());exit(1);printf("Children progress 1 over.\n");}pid_t pid2 = fork();if(pid2 == 0){printf("Children progress 2,PID is %d.\n",getpid());exit(1);printf("Children progress 1 over.\n");}pid_t pid3 = fork();if(pid3 == 0){printf("Children progress 3,PID is %d.\n",getpid());exit(1);printf("Children progress 1 over.\n");}else if (pid1 != -1 ){tprintf("Parent forked children process-- %d.\n",pid1);tprintf("Parent is waiting for child to exit.\n");waitpid(pid1,NULL,0);waitpid(pid2,NULL,0);waitpid(pid3,NULL,0);tprintf("Child Process had exited.\n");tprintf("Parent had exited.\n");} else{tprintf("Everything was done without error.\n");}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android WebView 与 JS 交互

目录二、具体分析2.1 Android通过WebView调用 JS 代码方式1&#xff1a;通过WebView的loadUrl()方式2&#xff1a;通过WebView的evaluateJavascript()方法对比使用建议2.2、JS通过WebView调用 Android 代码2.2.1、方法分析方式1&#xff1a;通过 WebView的addJavascriptInterfa…

关于锁的注意事项

文件锁 Linux 提供了 fcntl 系统调用&#xff0c;可以锁定文件但是文件锁是和进程相关联的&#xff0c;一个进程中的多个线程/协程对同一个文件进行的锁操作会互相覆盖掉&#xff0c;从而无效。fcntl 创建的锁是建议性锁&#xff0c;只有写入的进程和读取的进程都遵循建议才有效…

安卓实现登录与注册界面

使用Intent与Bundle传递数据 登录界面login.xml 1.使用Relativelayout相对布局 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"mat…

Android Button字母自动全部大写的问题

两种解决方案&#xff1a; 方法一&#xff1a; 在 xml 布局中设置属性 android:textAllCaps"false" <Buttonandroid:layout_width"wrap_content"android:layout_height"match_parent"android:text"添加动作组"android:textAllCap…

安卓Activity与intent跳转

Activity生命周期 Activity启动模式 Intent跳转 _________startActivity() 1.Intent intentnew Intent(A.this,B.class); startActivity(intent); 2.startActivity(new Intent(A.this,B.class)); _________startActivityForResult() Intent intentnew Intent(A.this,B.class…

将读写锁放到共享内存中,实现进程之间对数据的读写访问控制

代码 #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <assert.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <fstream> #include <…

Android WebView 使用漏洞

目录一、类型二、具体分析2.1、WebView任意代码执行漏洞2.1.1、addJavascriptInterface 接口引起远程代码执行漏洞漏洞产生原因解决方案关于该方法的其他细节总结2.1.2、searchBoxJavaBridge_接口引起远程代码执行漏洞漏洞产生原因解决方案2.1.3、accessibility和 accessibilit…

将读写锁放到共享内存,实现进程之间对于同一文件的读写操作

思路 将读写锁和读写锁的属性以及一个用于存储共享内存的地址的int型变量三者封装成一个struct结构将这个结构体放到共享内存中&#xff0c;以及将读写锁的属性设置成全局性质&#xff0c;然后使用这个属性初始化锁&#xff0c;以及将锁的地址关联到结构体的内存地址这个变量定…

Android Studio 查看页面布局层次结构

Android Studio有个可以查看手机上app页面布局层次结构的工具。可以协助我们对布局进行优化&#xff0c;去掉没有必要的节点等&#xff0c;通过这个工具可以清晰的看见页面整个结构&#xff1b;废话少说直接上图&#xff0c;再说过程。 这就是我们想要看到的&#xff0c;每个节…

Java web后端 第一章框架搭建

Redis 通用Mapper 通用Mapper->MyBatis动态SQL封装包,增删改查 0 SQL语句 PageHelper PageHelper–>实现分页操作,不需要limit,直接使用静态方法 电商系统技术特点 分布式(数据很多,一台电脑存储一部分数据) 高并发,集群(并发量很高,后台不只一个电脑) ,海量数据 主…

进程锁 读写文件的小例子 C++代码

代码 #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <cassert> #include <pthread.h> #include <cstdio> #include <cstdlib> #include <fstream> #include <io…

Java 中sleep()与wait()的区别

目录一、原理不同二、锁的处理机制不同三、使用的区域不同四、异常捕获不同五、总结一、原理不同 sleep()是Thread类的静态方法&#xff0c;是线程用来控制自身流程的&#xff0c;它会使此线程暂停执行指定的时间&#xff0c;而把执行机会让给其他的线程&#xff0c;等到计时时…

android--地图定位打卡

获取位置信息 1)位置信息 GPS卫星定位,在室外适用 基站(3个基站交叉,锁定手机位置)–基站定位不平均,有些地方实现不了3点定位 网络定位–通过手机IP地址,去锁定位置(消耗流量,对网络有要求) 谷歌地图的大致实现思路(通用) 2)实现定位功能的重要类 在百度地图和高德地图中不…

Android 将整形颜色值转换成String类型

转换方法&#xff1a; val hexColor String.format("#%06X", [0xFFFFFF or intColor]);转换结果&#xff1a; #F2EADA

MacOS 的 zsh 和 bash 切换

目录一、从 bash 切换到 zsh1、使用系统自带的 zsh2、使用第三方的 zsh2.1、Clone代码到本地2.2、备份你已存在的 ~/.zshrc 文件2.3、新建一份新的 zsh 配置文件2.4、改变默认的shell脚本二、从 zsh 切换回 bash三、zsh 和 bash 的环境变量zsh、bash 都是shell&#xff0c;zsh …

android--在命令行中生成Android的数字证书keystore文件

标题 生成 密钥口令为 13458977480 密钥库口令为 13458977480 存放位置 查看证书的相关资料

linux查看系统日志

cd /var/log/gscubuntu:/var/log$ tail -f syslog

IDEA 创建 SpringBoot 项目

目录一、新建Springboot项目第一步&#xff1a;新建一个Springboot项目第二步&#xff1a;选择项目模板第三步&#xff1a;设置项目配置第四步&#xff1a;设置项目依赖第五步&#xff1a;设置项目名称及路径第六步&#xff1a;创建完成二、测试及运行1、测试代码2、设置默认端…

VC++软件

一个main fatal error LNK1169: 找到一个或多个多重定义的符号–报错 一个项目即一个程序&#xff0c;多个文件只能有一个main函数 删除掉多余的main 控制台按enter键闪退 在代码中加上 #include<stdlib.h> getchar();//让控制台停留 system("pause");//让…