A brief discussion on simulating multi-threaded and multi-process crashes in Linux

A brief discussion on simulating multi-threaded and multi-process crashes in Linux

Conclusion:
In a multithreaded environment, if one of the threads crashes, other threads (the entire process) will crash.
If one of the processes in a multi-process environment crashes, it will have no impact on the remaining processes.

Multithreading

#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;
}

Multi-process

#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)); //Wait for all subprocesses to finish printf("main return\n");
 getchar();
 
 return 0;
}

This is the end of this article about Linux simulation of multi-threaded crashes and multi-process crashes. For more relevant Linux simulation of multi-threaded crashes and multi-process crashes, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Detailed explanation of C\C++ multi-process and multi-threaded programming examples under Linux
  • Implementation of Linux BASH multi-process parallel processing method
  • Sharing methods of implementing PHP multi-process under Linux
  • A brief analysis of a simple multi-threaded mutex lock example under Linux
  • Multithreaded programming in C language under Linux
  • Linux C multithreaded programming example code
  • Detailed explanation and simple examples of multithreading in Linux
  • Multithreaded programming under Linux (Part 3)
  • Linux multithreading uses mutex to synchronize threads
  • Linux multi-thread lock attribute setting method

<<:  The difference between distinct and group by in MySQL

>>:  Detailed explanation of the differences between var, let and const in JavaScript es6

Recommend

VMware Workstation installation Linux (Ubuntu) system

For those who don't know how to install the s...

Example code for using text-align and margin: 0 auto to center in CSS

Use text-align, margin: 0 auto to center in CSS W...

TypeScript installation and use and basic data types

The first step is to install TypeScript globally ...

Example code for implementing 3D text hover effect using CSS3

This article introduces the sample code of CSS3 t...

JavaScript to achieve simple image switching

This article shares the specific code for JavaScr...

Vue3 encapsulates its own paging component

This article example shares the specific code of ...

Summary of five commands to check swap space in Linux

Preface Two types of swap space can be created un...

Mini Program to Implement Sieve Lottery

This article example shares the specific code of ...

CSS clear float clear:both example code

Today I will talk to you about clearing floats. B...

Solution to Ubuntu not being able to connect to the Internet

Problem description: I used a desktop computer an...

Using js to implement simple switch light code

Body part: <button>Turn on/off light</bu...

Install and deploy java8 and mysql under centos7

Generally, learning Java and deploying projects a...

Solution to 700% CPU usage of Linux process that cannot be killed

Table of contents 1. Problem Discovery 2. View de...