您的位置:首页 > 运维架构 > Linux

Linux系统编程_6_进程环境(C程序典型的存储空间)

2014-12-19 08:44 253 查看
1.八种结束Linux进程的方法:

五种正常终止方式:

main函数返回;

调用exit;

调用_exit或_Exit

最后一个线程从其启动例程返回

最后一个线程调用pthread_exit

三种异常终止方式:

调用abort;

接收到一个信号终止;

最后一个线程对取消请求做出响应;

exit函数与_exit _Exit函数的区别是exit函数在结束进程之前会调用各种终止处理程序,关闭所有IO流,这会造成所有缓冲中的数据被冲洗(写到磁盘文件);

atexit(void (*fun)void)函数,用来给进程注册函数,退出时会执行注册过的函数,注册几次会调用几次;

2.命令行参数与环境表:

extern char **environ; //每个程序都会有一张环境表,与参数表一样,环境表也是一个字符指针数组,其中每个指针以NULL(\0)结束;

全局变量environ指向了该环境表的首地址;

#include <stdio.h>

int main(int argc, char **argv, char **env)
{
    int i;

    printf("================Argv Pram===================\n");
    for(i=0; i<argc; i++)
    {
        printf("argc[%d]= %s\n", i, argv[i]);
    }

    printf("\n=============Environment Pram==============\n");
    for(; *env != NULL; env++)
    {
        printf("%s\n", *env);
    }

    return 0;
}


执行结果:

================Argv Pram===================

argc[0]= ./main

=============Environment Pram==============

HOSTNAME=150

SELINUX_ROLE_REQUESTED=

TERM=xterm

SHELL=/bin/bash

HISTSIZE=1000

SSH_CLIENT=192.168.0.88 12069 22

(......)

3. C程序典型的存储空间

C程序典型的存储空间如下:



对于X86处理器的Linux上,正文段从0x08048000单元开始,栈底则在0xc0000000之下开始,堆顶和栈底之间未使用的空间很大。

注意:未初始化的bss段并不存放在磁盘上的程序文件中,原因是内核在程序开始运行前都将它们设置为0,需要存放在程序文件中的段只有正文段和初始化数据段。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: