結論是:
多線程下如果其中一個線程崩潰了會導致其他線程(整個進程)都崩潰;
多進程下如果其中一個進程崩潰了對其余進程沒有影響;
多線程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#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; } |
多進程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#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模擬多線程崩潰和多進程崩潰 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://segmentfault.com/a/1190000022828326