结论是:多线程下如果其中一个线程崩溃了会导致其他线程(整个进程)都崩溃;多进程下如果其中一个进程崩溃了对其余进程没有影响;
多线程
#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模拟多线程崩溃和多进程崩溃 内容请搜索优爱好网以前的文章或继续浏览下面的相关文章希望大家以后多多支持优爱好网!
相关文章:
1. Win11磁盘分区出现defrag事件的原因及解决教程2. Win11预览版25295怎么开启Suggested Actions 等隐藏新功能?3. Win11右键没有压缩选项怎么办?Win11右键没有压缩选项的解决方法4. Win11 双击文件夹弹出属性怎么办?Win11双击文件夹弹出属性解决方法5. Win11手柄连接成功用不了的解决方法6. win最稳定的版本推荐7. 你没有权限在此位置中保存文件请与管理员联系以或得相应权限8. Win11提示音怎么关闭?Win11系统开机提示音关闭方法9. Win11控制面板一直闪烁怎么回事?Win11控制面板打不开一直闪解决方法10. Win11右下角弹出英特尔无线bluetooth的解决教程