fprintf(stderr, "pthread\_create : %s\n", strerror(ret));
	exit(-1); //如果创建线程失败会走进此语句
}
int i;
for(; ; ) {
	printf("I'am main thread\n");
	sleep(1);
}
return 0;

}


2. `如何终止线程`


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/53bc91d51339463995a0b1ba69b698c5.png)


一般使用return返回的来终止线程


3. `如何进行线程等待`


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/87edb1ef5b764059b509431c90135282.png)



> 
> **假如不进行线程等待,可能会出现类似于僵尸进程的问题**
> 
> 
> 


`一般编码格式:`



void *thread_run( void * arg )
{
pthread_detach(pthread_self());
printf(“%s\n”, (char*)arg);
return NULL;
}
int main( void )
{
pthread_t tid;
if ( pthread_create(&tid, NULL, thread_run, “thread1 run…”) != 0 ) {
printf(“create thread error\n”);
return 1;
}
int ret = 0;
sleep(1);//很重要,要让线程先分离,再等待
if ( pthread_join(tid, NULL ) == 0 ) {
printf(“pthread wait success\n”);
ret = 0;
} else {
printf(“pthread wait failed\n”);
ret = 1;
}
return ret;
}


4. `如何进行线程分离`


**假如创建一个线程后,不想关心它的返回值,此时使用join等待实际上是一种负担,所以使用线程分离后,可以把创建的线程和主线程分离,这样就不会影响到主线程**


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/34334111361c452d9d392a0b06d8ae27.png)



> 
> **pthread\_self()函数可以返回当前线程的线程ID,所以假设我们想要当前线程与主线程脱离关系,可以这样写: pthread\_detach(pthread\_self());** 
> 
> 
> 


`一般编码格式:`



void *thread_run( void * arg )
{
pthread_detach(pthread_self());
printf(“%s\n”, (char*)arg);
return NULL;
}
int main( void )
{
pthread_t tid;
if ( pthread_create(&tid, NULL, thread_run, “thread1 run…”) != 0 ) {
printf(“create thread error\n”);
return 1;
}
int ret = 0;
sleep(1);//很重要,要让线程先分离,再等待
if ( pthread_join(tid, NULL ) == 0 ) {
printf(“pthread wait success\n”);
ret = 0;
} else {
printf(“pthread wait failed\n”);
ret = 1;
}
return ret;
}




---


## 5. pthread线程库讲解


首先,pthread\_create的返回值是线程ID.  
 那么线程ID的本质是什么呢?



> 
> **答案是,线程ID的本质是一个地址,pthread库是一个动态库,是第三方库,这个库会被映射到进程的地址空间的共享区中,而线程ID所指的地址则是pthread这个库层面上,线程集合的起始地址** 
> 
> 
> 


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e215dd271da54228836c989102f94164.png)


**再回忆一下刚才的内容,线程有自己的栈区,也就是说线程要维护自己的栈区,那么可以联想一下,谁帮线程维护这个栈区呢?答案是pthread库维护的栈区,也就是说其实线程的栈区也是被映射到共享区的,由pthread第三方库维护**




---


## 6. 线程和前面知识的汇总


这里有三个问题要思考一下:


1. **线程异常退出后,主线程也会退出吗?**
2. **线程可以用fork创建子进程吗?**
3. **线程可以进行进程程序替换吗?**


* `第一个问题`



> 
> 一个进程(主线程)可以拥有多个线程,这多个线程只要其中一个线程发生错误,导致此线程退出,那么所有的线程包括主线程都会退出.所以在编写线程函数时,一定要多加小心
> 
> 
> 


* `第二个问题`



> 
> 线程可以通过函数fork来创建子进程,并且在实际运用中是有被使用到的实例
> 
> 
> 


* `第三个问题`



> 
> 线程不能进行进程程序替换,因为线程是共用主线程的资源,一旦一个线程进行进程程序替换后,所有的线程包括主线程的代码都会被替换为别的程序,这显然是不正确的
> 
> 
> 




---


## 7. 总结以及拓展


最后,创建线程有优点也有缺点,在实际  
 编写代码中大家根据自己的需求来定


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a84bc7e2e68f4e8ab437fe3845e6850e.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f8bf28c710754f3a9525bda231a55ca4.png)



**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/35d28efffe1805abec8966c315b24c58.png)
![img](https://img-blog.csdnimg.cn/img_convert/817dd6f0c50152b3b2a55c2f098e4797.png)
![img](https://img-blog.csdnimg.cn/img_convert/81047f4b39c7aac8230f3a65e2c2e71a.png)
![img](https://img-blog.csdnimg.cn/img_convert/138c1a632237c1c3c04b04ba0896a713.png)
![img](https://img-blog.csdnimg.cn/img_convert/b8c6c603f6598c3c46d37f078d2d1034.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
![img](https://img-blog.csdnimg.cn/img_convert/753a8a7b02d613c3ac238ada9fcc6050.jpeg)

![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)



最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/cf62833e606f9ccbe909bb56bc2b40a7.jpeg)

校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-sAv9YJFk-1712757438765)]

Logo

一站式 AI 云服务平台

更多推荐