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


    1.八种结束Linux进程的方法:

    五种正常终止方式:

       main函数返回;

       调用exit;

       调用_exit或_Exit

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

       最后一个线程调用pthread_exit

    三种异常终止方式:

       调用abort。

       接收到一个信号终止;

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


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

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


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

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

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

    #include <stdio.h>
    
    int main(int argc, char **argv, char **env)
    {
        int i;
    
        printf("================Argv Pram===================
    ");
        for(i=0; i<argc; i++)
        {
            printf("argc[%d]= %s
    ", i, argv[i]);
        }
    
        printf("
    =============Environment Pram==============
    ");
        for(; *env != NULL; env++)
        {
            printf("%s
    ", *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,须要存放在程序文件里的段仅仅有正文段和初始化数据段。



  • 相关阅读:
    Linux工具[转]
    [C++]线程池 与 [Go] mapreduce
    快手面试代码题
    C++ note
    sudo与用户权限
    service 与 log日志
    tmux-cheatsheet
    [转]Linux下的常见信号总结
    记一个低级错误
    Github个人主页不显示提交记录的问题
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6844894.html
Copyright © 2020-2023  润新知