linux下./xx做了什么?

一直都很好奇linux下./xx程序怎么执行起来的?
昨晚有个小伙伴简单分享了下,有了一个不成熟的认识:
在linux的shell中输入./可执行程序后,shell会fork出一个子进程来处理,进行一系列的内核接口调用,加载elf文件到系统中,这过程做的操作全是linux内核干的活,比如开辟进程栈(进程的主线程栈),然后进行一系列准备(主要是进程的创建),一切就绪后,就会运行你的程序。

原来进程栈(进程的主线程栈)是映射到进程虚拟地址空间的栈区,而通过pthread_create创建的普通线程的线程栈是glibc/uclibc等运行时库从堆里分配的空间映射到进程虚拟地址空间的堆区的!不是栈区!这就是进程栈和线程栈区别,或者说主线程与普通线程的栈区别!

用户态的栈是可以动态扩容的,在linux下有个宏,默认是8M。在8M内,所需栈要增加就给你扩容,如果再增加就超过8M的阈值了,那么就会发出段错误信号SIGSEGV给进程,俗称段错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值