浅谈linux模拟多线程崩溃和多进程崩溃
结论是:
多线程下如果其中一个线程崩溃了会导致其他线程(整个进程)都崩溃;
多进程下如果其中一个进程崩溃了对其余进程没有影响;
多线程
#include#include #include #include #include void*fun1(void*arg) { printf("fun1enter\n"); while(1) { printf("%s\n",__FUNCTION__); usleep(1000*1000); } printf("fun1exit\n"); return((void*)1); } void*fun2(void*arg) { printf("fun1enter\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("fun2exit\n"); return((void*)2); } intmain(void) { pthread_ttid1,tid2; interr; err=pthread_create(&tid1,NULL,fun1,NULL); assert(0==err); err=pthread_create(&tid2,NULL,fun2,NULL); assert(0==err); printf("mainjoin...\n"); //getchar(); pthread_join(tid1,NULL); pthread_join(tid2,NULL); return0; }
多进程
#include#include #include #include #include voidfun(void*arg) { printf("fun1enter\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("fun2exit\n"); return; } intmain(intargc,char*argv[]) { assert(2==argc); pid_tpid; inti; for(i=0;i pid) { printf("forkerror"); exit(1); } elseif(0==pid) { printf("childpidis%lu\n",(unsignedlong)getpid()); fun(NULL); exit(0); } } printf("parentpidis%lu\n",(unsignedlong)getpid()); while(-1!=wait(NULL));//等待所有子进程结束 printf("mainreturn\n"); getchar(); return0; }
到此这篇关于浅谈linux模拟多线程崩溃和多进程崩溃的文章就介绍到这了,更多相关linux模拟多线程崩溃和多进程崩溃内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。