进程的环境

来源:互联网 发布:linux teamview 卸载 编辑:程序博客网 时间:2024/04/29 11:17
  • 当内核起动C程序时(使用一个exec()函数),在调用main()前先调用一个特殊的起动例程。可执行程序文件将此起动例程指定为程序的起始地址——这是由连接编辑程序设置的,而连接编辑程序则由C编译程序(通常是cc)调用。起动例程从内核取得命令行参数和环境变量值,然后为调用main()函数作好安排。


  • 有五种方式使进程终止
    正常终止
    从main()返回
    调用exit()
    调用_exit()
    异常终止
    调用abort()
    由一个信号终止
    wait()/waitpid()可以获得进程终止的状态


  • 按照ANSIC的规定,一个进程可以登记多至32个函数,这些函数将由exit()自动调用。我们称这些函数为终止处理程序(exit handler),并用atexit()函数来登记这些函数。
    atexit()的参数是一个函数地址,当调用此函数时无需向它传送任何参数,也不期望它返回一个值。exit()以登记这些函数的相反顺序调用它们。同一函数如若登记多次,则也被调用多次。



  • 每个程序都接收到一张环境表。与参数表一样,环境表也是一个字符指针数组,其中每个指针包含一个以null结束的字符串的地址。全局变量environ则包含了该指针数组的地址。
    extern char **environ;
    按照惯例,环境由name=value格式的字符串组成
    getenv()/putenv()/setenv()可以用来取得/设置环境变量