浅谈linux模拟多线程崩溃和多进程崩溃
时间:2022-07-26
本文章向大家介绍浅谈linux模拟多线程崩溃和多进程崩溃,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
结论是: 多线程下如果其中一个线程崩溃了会导致其他线程(整个进程)都崩溃; 多进程下如果其中一个进程崩溃了对其余进程没有影响;
多线程
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>
void *fun1(void *arg)
{
printf("fun1 entern");
while(1)
{
printf("%sn", __FUNCTION__);
usleep(1000 * 1000);
}
printf("fun1 exitn");
return ((void *)1);
}
void *fun2(void *arg)
{
printf("fun1 entern");
usleep(1000 * 3000);
char * ptr = (char *)malloc(sizeof(char));
printf("ptr1: 0x%xn", ptr);
ptr = NULL;
printf("ptr2: 0x%xn", ptr);
free(ptr);
memcpy(ptr, "123", 3);
printf("ptr3: 0x%xn", ptr);
printf("fun2 exitn");
return ((void *)2);
}
int main(void)
{
pthread_t tid1, tid2;
int err;
err = pthread_create(&tid1, NULL, fun1, NULL);
assert(0 == err);
err = pthread_create(&tid2, NULL, fun2, NULL);
assert(0 == err);
printf("main join ...n");
// getchar();
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
多进程
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>
void fun(void *arg)
{
printf("fun1 entern");
usleep(1000 * 3000);
char * ptr = (char *)malloc(sizeof(char));
printf("ptr1: 0x%xn", ptr);
ptr = NULL;
printf("ptr2: 0x%xn", ptr);
free(ptr);
memcpy(ptr, "123", 3);
printf("ptr3: 0x%xn", ptr);
printf("fun2 exitn");
return ;
}
int main(int argc, char *argv[])
{
assert(2 == argc);
pid_t pid;
int i;
for(i=0; i<atoi(argv[1]); i++)
{
pid = fork();
if(0 > pid)
{
printf("fork error");
exit(1);
}
else if(0 == pid)
{
printf("child pid is %lun", (unsigned long)getpid());
fun(NULL);
exit(0);
}
}
printf("parent pid is %lun", (unsigned long)getpid());
while(-1 != wait(NULL)); //等待所有子进程结束
printf("main returnn");
getchar();
return 0;
}
到此这篇关于浅谈linux模拟多线程崩溃和多进程崩溃 的文章就介绍到这了,更多相关linux模拟多线程崩溃和多进程崩溃 内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!
- 外部表简单总结(r3笔记第51天)
- 通过shell脚本监控sql执行频率(r3笔记第50天)
- 和Null有关的函数(r3笔记第48天)
- 关于查询转换的一些简单分析(二) (r3笔记第68天)
- 跨网络拷贝文件的简单实践(r3笔记第67天)
- 关于enq: TX - allocate ITL entry的问题分析(r3笔记第66天)
- Tensorflow学习:使用Tensorflow搭建深层网络分类器
- 关于interval partitioning(r3笔记65天)
- Spark Tips4: Kafka的Consumer Group及其在Spark Streaming中的“异动”(更新)
- 关于数据库中的一些name(r3笔记第64天)
- 码农的瑞士军刀-脚本语言
- shell基础学习总结(一) (r3笔记第63天)
- 关于sysdba,sysoper,dba的区别(r3笔记第62天)
- 使用句柄实现特定场景的无备份恢复 (r3笔记第61天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter NestedScrollView实现的一个经典滑动折叠头部图片的效果
- Maven 编译拷贝资源的时候提示 UTF-8 编码信息
- Qt音视频开发30-Onvif事件订阅
- 干掉 Navicat:正版,MySQL 官方客户端真香!
- CentOS 搭建 K8S 环境教程,一次性成功,收藏了!
- IDEA 真香!找出全部未被使用的代码只用了 2 秒钟!
- ArrayList 插入 1000w 条数据之后,我怀疑了 Java 虚拟机。。。
- 本地存储应用案例 ToDoList
- jQuery 插件
- 本周AI热点回顾:RTX3080被黄牛炒上天;百度资本助力AI 制药,已有十几位博士加入;百度联手打造AI沉浸互动展中国首秀
- 线段树
- 乘法表中第k小的数
- 数据可视化 | Pandas vs Plotnine
- laravel里使用chunk的一个坑
- 一个小小的签到功能,到底用 MySQL 还是 Redis ? ?