Linux下C程序都是main开始的,main函数的原型是:

int main(int argc, char **argv)

其中argc是命令行参数的数目,argc是指向参数的各个指针所构成的数组。

进程终止

C程序中有3个函数用于正常终止一个进程,_exit和_Exit立即进入内核,exit则做一些清理工作后后进入内核,比如清理IO缓冲区数据,对于所有打开的流进行close操作。 这3个函数都带一个整型参数,成为终止状态。

#include <stdlib.h>
void exit(int status);
void _Exit(int status);
#include <unistd.h>
void _exit(int status);

atexit函数

atexit函数用来登记终止处理函数,按照ISO C的规定,一个进程最多可以登记32个函数,这些函数将由exit函数自动调用。进程终止时,exit首先调用各终止函数,然后关闭打开的流。

#include <stdio.h>
int atexit(void (*func)(void));

使用atexit函数登记进程终止函数:

#include <stdio.h>

void my_exit1(void)
{
printf("my_exit1\n");
} void my_exit2(void)
{
printf("my_exit2\n");
} int main(int argc, char **argv)
{
atexit(my_exit1);
atexit(my_exit2); printf("hello world\n"); return ;
}

输出结果:

进程环境表

每个进程都有一个环境表,与参数表一样,环境表也是一个指针数组:

通常用getenv和putenv函数来访问特定的环境变量,而不是environ变量。但是,如果要查看整个环境,则必须使用environ指针。

C程序的存储空间

任何程序的内存空间都可分为4个基本部分,各个部分的首地址是固定的。

  • 正文段 这是CPU执行的机器指令部分
  • 数据段(初始化数据段/非初始化数据段)
  • 堆 通常在堆中动态分配存储
  • 栈 自动变量以及每次函数调用时所需保存的信息都存放在此段中

存储空间分配

C程序中有3个用于空间动态分配的函数:

  • malloc:分配指定字节数的存储区,此存储区的初始值不确定。
  • calloc:为指定数量指定长度的对象分配存储空间,该空间每一位都初始化为0。
  • realloc:增加或减少以前分配区的长度,当增加长度时,如果该分配区后面有相邻的足够空间,则直接在后面的临近空间分配;否则将以前分配区的内容转移到另一额足够大的区域中。

Linux进程环境的更多相关文章

  1. Linux 进程(一):环境及其控制

    进程环境 main启动 当内核执行C程序时,在调用main前先调用一个特殊的启动例程.可执行程序将此启动例程指定为程序的起始地址,接着启动例程从内核中取出命令行参数和环境变量值,然后执行main函数. ...

  2. UNIX环境高级编程——Linux进程地址空间和虚拟内存

    一.虚拟内存 分段机制:即分成代码段,数据段,堆栈段.每个内存段都与一个特权级相关联,即0~3,0具有最高特权级(内核),3则是最低特权级(用户),每当程序试图访问(权限又分为可读.可写和可执行)一个 ...

  3. Linux进程-命令行参数和环境列表

    命令行参数 在C中,main函数有很多的变种,比如 main(), int main(), int main(int argc, char *argv[]), int main(int argc, c ...

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

    1.八种结束Linux进程的方法: 五种正常终止方式: main函数返回: 调用exit: 调用_exit或_Exit 最后一个线程从其启动例程返回 最后一个线程调用pthread_exit 三种异常 ...

  5. Linux/UNIX之进程环境

    进程环境 进程终止 有8种方式使进程终止,当中5中为正常终止,它们是 1)      从main返回 2)      调用exit 3)      调用_exit或_Exit 4)      最后一个 ...

  6. 如何灵活运用Linux 进程资源监控和进程限制

    导读 每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工 ...

  7. Linux进程管理子系统分析【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...

  8. linux 进程管理相关内容

    简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...

  9. linux网络环境下socket套接字编程(UDP文件传输)

    今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...

随机推荐

  1. ubuntu 安装Elasticsearch5.0(Debian包)

    通过Debian包安装Elasticsearch Elasticsearch的Debian包可以从downloaded from our website或APT repository 它可以用于在任何 ...

  2. 谁是2016年的.NET开发者?

    Nora Georgieva (http://www.telerik.com/blogs/infographic-the-dotnet-developer-of-2016) Whether you h ...

  3. C#多线程之基础篇2

    在上一篇C#多线程之基础篇1中,我们主要讲述了如何创建线程.中止线程.线程等待以及终止线程的相关知识,在本篇中我们继续讲述有关线程的一些知识. 五.确定线程的状态 在这一节中,我们将讲述如何查看一个线 ...

  4. Bootstrap人民币玩家攻略

    用bootstrap及其它基于它的框架,做了多次网站大改版~对bootstrap的特点有了越来越深的了解~从一开始接触时觉得超级鸡肋,到后来觉得方便,再到后来觉得还是能不用就别用了~为什么这么说?我们 ...

  5. 跨域之jsonp

    我们都知道使用<script>标签可以引入外部的JS文件,即使这个JS文件来自于其他的网站,比如我们引用存放在网络服务器上的jQuery框架.在这个过程中,我们已经实现跨域访问.像< ...

  6. Dozer扫盲级教程

    前言 这篇文章是本人在阅读Dozer官方文档(5.5.1版本,官网已经一年多没更新了)的过程中,整理下来我认为比较基础的应用场景. 本文中提到的例子应该能覆盖JavaBean映射的大部分场景,希望对你 ...

  7. Bootstrap 4-alpha 初体验

    What is Bootstrap? 第一句话就是废话了,作为新时代有理想有节操的开发人员无人不知无人不晓.可能就是熟悉程度因为各种原因不尽相同,有人只是知道他大概是个什么东西,有些人可能基本可以使用 ...

  8. [jQuery]jQuery DataTables插件自定义Ajax分页实现

    前言 昨天在博客园的博问上帮一位园友解决了一个问题,我觉得有必要记录一下,万一有人也遇上了呢. 问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分 ...

  9. C#中级-开机自动启动程序

    一.前言 关于C#开机自动启动程序的方法,网上出现比较多的是修改注册表: 1. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion ...

  10. C# base 64图片编码解码

    使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...