专栏首页恩蓝脚本浅谈linux模拟多线程崩溃和多进程崩溃

浅谈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模拟多线程崩溃和多进程崩溃 内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python网络编程之五子棋游戏

    一.本案例基于UDP的socket编程方法来制作五子棋程序,网络五子棋采用C/S架构,分为服务器端和客户端,游戏时服务端首先启动,当客户端启动连接后,服务器端可...

    砸漏
  • centos6-7 yum安装php的方法(推荐)

    以上所述是小编给大家介绍的centos6-7 yum安装php的方法,希望对大家有所帮助!

    砸漏
  • Linux编程之ICMP洪水攻击

    我的上一篇文章《Linux编程之PING的实现》里使用ICMP协议实现了PING的程序,ICMP除了实现这么一个PING程序,还有哪些不为人知或者好玩的用途?这...

    砸漏
  • 通过Proxifier、V2ray和Newwifi捕获任意的http和https流量

    通常情况下,有一个设备无法设置代理的情况下,要做到修改它的发包或者改包比较困难,以前我们都是用arp欺骗进行流量导流来做的,但是下面我介绍一种新的方法。

    FB客服
  • 视频 | 商汤科技联合创始人徐冰:人工智能的特殊商业模式探索

    数据猿导读 深度学习有哪些要素?算法在哪些行业已经实现了颠覆?且看中欧微论坛 | 数据猿·超声波活动中商汤科技联合创始人徐冰怎么答。 ? 作者 | 徐冰 深度学...

    数据猿
  • 学委助手

    学委除了要收作业,最烦的就是统计谁没有交作业啦,还有就是大家的命名不统一造成文件排序混乱,更加大了学委统计的难度。所以,写这个应用的目的就是查交和格式化文件命名...

    Woodson
  • 瑞典保险公司Folksa数据泄露,近百万客户信息流入社交媒体

    当地时间11月3日,瑞典最大的保险公司Folksa证实,近100万客户的个人信息已泄露给Facebook和Google等社交媒体。Folksam表示歉意,并已要...

    FB客服
  • 回归建模的时代已结束,算法XGBoost统治机器学习世界

    Vishal Morde讲了这样一个故事:十五年前我刚完成研究生课程,并以分析师的身份加入了一家全球投资银行。在我工作的第一天,我试着回忆我学过的一切。与此同时...

    用户2769421
  • Java运行报错:Error: Could not find or load main class

    版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/...

    魏晓蕾
  • 网易易盾李雨珂:服务性能+算法确定性优化

    LiveVideoStack

扫码关注云+社区

领取腾讯云代金券