10 | 进程:公司接这么多项目,如何管?
该思维导图由 AI 生成,仅供参考
写代码:用系统调用创建进程
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了在Linux操作系统上使用系统调用创建进程的方法,并通过实际代码演示了整个过程。文章首先详细讲解了在CentOS 7操作系统上安装开发套件和使用Vim创建并编辑程序文件的步骤,为读者提供了实际操作的指导。接着,文章提供了一个名为process.c的文件,其中封装了创建进程的通用逻辑,并使用了fork系统调用来实现父子进程的分离。此外,文章还展示了如何调用上述函数来创建一个子程序并运行最简单的命令ls。通过对ELF文件格式的详细解释,读者可以了解在Linux操作系统下编译、链接和运行程序的基本原理和过程。文章还介绍了静态链接库和动态链接库的概念,并通过实际操作演示了如何创建和使用这两种类型的库文件。此外,文章还讲解了进程树的概念,从系统启动的init进程到用户启动的进程形成的进程树。最后,文章提供了课堂练习和工具推荐,帮助读者更好地理解和分析ELF文件的格式。整体而言,本文通过实例和详细解释,帮助读者快速了解在Linux操作系统上使用系统调用创建进程的基本步骤和方法,以及程序的编译、链接和运行过程。
《趣谈 Linux 操作系统》,新⼈⾸单¥68
全部留言(126)
- 最新
- 精选
- 任鹏斌置顶第一次读这篇放弃了,第二次花了40分钟对着图看懂了,原来所谓看懂都是借口
作者回复: 赞
2019-04-28364 - 上善若水看到程序的编译链接和库的东西,我感觉很熟悉,我就想到了之前看的一本特别好的书,推荐一下《程序员的自我修养-链接、装载和库》,这本书讲的十分不错,之前毕业时我看过,读了好几遍,然后在做项目过程中给intel移植android系统到x86_64位cpu上时通过elf等知识解决了好几个bug,感觉很有成就感。
作者回复: 这本书很赞
2019-04-17485 - 沐夜星光"这个过程有点绕,但是是不是也很巧妙?"还是不明白,这么绕的用意在哪里,代理代码第一次调用GOT[y]的时候,GOT[y]如果不知道,直接调用GOT[2]中的入口函数就行了,为啥要先回调,再调PLT[0],再调GOT[2],是因为有些资源在PLT[0]中,必须到那里获取吗?
作者回复: 统一PLT和GOT的作用,PLT就是用来放代理代码的,也即stub代码的,GOT是用来存放so对应的真实代码的地址的。 ld-linux.so虽然默认会被加载,但是也是一个so,所以会放在GOT里面。要调用这个so里面的代码,也是需要从stub里面统一调用进去的,所以要回到PLT去调用。
2019-07-16428 - MJ理论不扎实,有点懵,老师可否推荐入门书籍,课下先补补
编辑回复: 你可以列出来哪里不懂,老师来加餐帮你们补齐。
2019-04-17523 - kdb_reboot这篇很赞,看懂了plt和got, 这篇文章堪比<<程序员的自我修养>>啊~
作者回复: 赞
2019-07-0811 - herongwei老师讲得太棒了,非常详细,非常认真,值得我们反复研读,下次打印出来文稿,放在书包里,地铁通勤路上拿出来阅读,哈哈
作者回复: 赞
2019-05-05211 - William老师更多提供一个全局的视图,具体细节可以看经典的CSAPP,链接的过程讲了整整一大章。
作者回复: 是的,是的
2019-04-1711 - 落石简单说下作为一只小白的心路历程。看到11章线程 --> 进程呢? --> 回忆上一章 --> C程序的编译链接及文件格式 --> 点开10章 --> 没错是进程了 --> 线程和进程的关系? 这两章学下来,感觉收获很多,非常感谢老师,后续会具体聊下线程和进程之间的区别么?之前的理解就是线程是进程的子集,但在网上搜了一下不止于此。老师可以简单聊下这个么?
作者回复: 线程不是进程的子集。进程是项目,线程是项目的执行。项目包含资源,也会有一个默认主线程来执行这个项目,也可以创建多个线程来执行这个项目
2019-04-1910 - 四月长安请问老师,不是所有进程的祖宗进程都是0号进程吗
作者回复: 0号进程不是一个实实在在可以看到的进程
2019-04-18210 - 蹦哒动态链接库查找的过程,是否可以理解为类似缓存原理:PLT[x]先直接找缓存(GOT[y]),没命中,然后从源头找(通过PLT[0]调用GOT[2]),找到了放入缓存(GOT[y]),下次就直接调用缓存了。只不过缓存没命中时通过PLT[0]调用GOT[2],而不是直接调GOT[2],因为调用都是由PLT发起的
作者回复: 赞
2020-06-106