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 14 Pro installs CentOS 7.0

The specific method of installing CentOS 7.0 on V...

Specific use of routing guards in Vue

Table of contents 1. Global Guard 1.1 Global fron...

Detailed analysis of compiling and installing vsFTP 3.0.3

Vulnerability Details VSFTP is a set of FTP serve...

Detailed explanation of the usage of the ESCAPE keyword in MySQL

MySQL escape Escape means the original semantics ...

Linux file systems explained: ext4 and beyond

Today I will take you through the history of ext4...

Detailed summary of web form submission methods

Let's first look at several ways to submit a ...

Detailed steps for implementing timeout status monitoring in Apache FlinkCEP

CEP - Complex Event Processing. The payment has n...

CentOS 7 set grub password and single user login example code

There are significant differences between centos7...

Implementation of socket options in Linux network programming

Socket option function Function: Methods used to ...

Use scripts to package and upload Docker images with one click

The author has been working on a micro-frontend p...

MySQL 5.6.28 installation and configuration tutorial under Linux (Ubuntu)

mysql5.6.28 installation and configuration method...

Detailed explanation of three ways to cut catalina.out logs in tomcat

1. Log4j for log segmentation 1) Prepare three pa...

How to view the storage location of MySQL data files

We may have a question: After we install MySQL lo...