浅谈linux模拟多线程崩溃和多进程崩溃

 更新时间:2020年06月04日 14:11:04   作者:王冠  
这篇文章主要介绍了浅谈linux模拟多线程崩溃和多进程崩溃,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

结论是:
多线程下如果其中一个线程崩溃了会导致其他线程(整个进程)都崩溃;
多进程下如果其中一个进程崩溃了对其余进程没有影响;

多线程

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>

void *fun1(void *arg)
{
 printf("fun1 enter\n");
 while(1)
 {
  printf("%s\n", __FUNCTION__);
  usleep(1000 * 1000);
 }
 printf("fun1 exit\n");
 return ((void *)1);
}

void *fun2(void *arg)
{
 printf("fun1 enter\n");
 usleep(1000 * 3000);
 char * ptr = (char *)malloc(sizeof(char));
 printf("ptr1: 0x%x\n", ptr);
 ptr = NULL;
 printf("ptr2: 0x%x\n", ptr);
 free(ptr);
 memcpy(ptr, "123", 3);
 printf("ptr3: 0x%x\n", ptr);
 printf("fun2 exit\n");
 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 enter\n");
 usleep(1000 * 3000);
 char * ptr = (char *)malloc(sizeof(char));
 printf("ptr1: 0x%x\n", ptr);
 ptr = NULL;
 printf("ptr2: 0x%x\n", ptr);
 free(ptr);
 memcpy(ptr, "123", 3);
 printf("ptr3: 0x%x\n", ptr);
 printf("fun2 exit\n");
 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 %lu\n", (unsigned long)getpid());
   fun(NULL);
   exit(0);
  }
 }
 
 printf("parent pid is %lu\n", (unsigned long)getpid());
 while(-1 != wait(NULL));  //等待所有子进程结束
 printf("main return\n");
 getchar();
 
 return 0;
}

到此这篇关于浅谈linux模拟多线程崩溃和多进程崩溃 的文章就介绍到这了,更多相关linux模拟多线程崩溃和多进程崩溃 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vim的分屏功能命令大全

    Vim的分屏功能命令大全

    写code的朋友可能都会有个烦恼,长长的代码,小小的屏幕,是我怎能瞻前顾后?而vim的分屏功能在一定程度上解决了这个问题。这篇文章主要给大家介绍了Vim的分屏功能实现,文中通过图文以及详细步骤给大家进行了介绍,相信会对大家的理解和学习很有帮助,
    2016-11-11
  • Apache APISIX Dashboard 未授权访问漏洞分析(CVE-2021-45232)

    Apache APISIX Dashboard 未授权访问漏洞分析(CVE-2021-45232)

    Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能,这篇文章主要介绍了Apache APISIX Dashboard 未授权访问漏洞(CVE-2021-45232),需要的朋友可以参考下
    2023-03-03
  • Apache之AllowOverride参数使用说明

    Apache之AllowOverride参数使用说明

    通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。
    2011-01-01
  • linux使用tcpdump命令监视指定网络数据包的方法

    linux使用tcpdump命令监视指定网络数据包的方法

    linux使用tcpdump命令监视指定网络数据包的方法,大家参考使用吧
    2013-12-12
  • Linux中的冷热页机制简述

    Linux中的冷热页机制简述

    这篇文章主要为大家详细介绍了Linux中的冷热页机制,什么是冷热页?为什么要有冷热页?感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 用DNSPod和Squid打造自己的CDN (五) 安装Squid的前期准备

    用DNSPod和Squid打造自己的CDN (五) 安装Squid的前期准备

    从本章开始,大家将会学到如何在Linux下面安装、编译程序,还会学到程序编译的优化方法,最后会通过源代码编译的方式把Squid安装上
    2013-04-04
  • Ubuntu18.04 Server版安装及使用(图文)

    Ubuntu18.04 Server版安装及使用(图文)

    这篇文章主要介绍了Ubuntu18.04 Server版安装及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 解决Linux下Mysql5.7忘记密码问题

    解决Linux下Mysql5.7忘记密码问题

    这篇文章主要介绍了解决Linux下Mysql5.7忘记密码问题,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Linux创建文件的五种方法

    Linux创建文件的五种方法

    本文介绍五种在Linux系统中创建文件的方法,包括使用touch命令、使用文本编辑器创建文件、使用echo命令创建文件、使用cat命令创建文件以及使用重定向符号创建文件,全面了解并掌握在Linux系统中创建文件的各种常用方法,需要的朋友可以参考下
    2025-03-03
  • 如何为CentOS 7配置静态IP地址的两种方法

    如何为CentOS 7配置静态IP地址的两种方法

    本篇文章主要介绍了如何为CentOS 7配置静态IP地址的几种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02

最新评论