进程环境

来源:互联网 发布:java jdk版本查看 编辑:程序博客网 时间:2024/05/01 12:31

进程终止

有8种方式使进程终止,其中5种为正常终止,它们是

(1)从main返回。

(2)调用exit。

(3)调用_exit或_Exit。

(4)最后一个线程从其启动例程返回。

(5)最后一个线程调用pthread_exit。

异常终止有3种方式,它们是

(1)调用abort。

(2)接到一个信号并终止。

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


1.exit函数

有三个函数用于正常终止一个程序:_exit和_Exit立即进入内核,exit则先执行一些清理处理(包括调用执行各终止处理程序,关闭所有标准I/O流等),然后进入内核。

#include <stdlib.h>

void exit(int status);

void _Exit(int status);

#include <unistd.h>

void _exit(int status);


2.atexit函数

一个进程可以登记多个函数,这些函数将由eixt自动调用,调用顺序与登记顺序相反。

#include <stdlib.h>

int atexit(void (*func)(void));


C程序的存储空间布局

由以下几部分组成:

1.正文段。这是由CPU执行的机器指令部分。

2.初始化数据段。它包含了程序中需明确地赋初值的变量。

3.非初始化数据段。通常将此段称为bss段,在程序开始执行之前,内核将此段中的数据初始化为0或空指针。

4.栈。自动变量以及每次函数调用时所需保存的信息都存放在此段中。

5.堆。通常在堆中进行动态存储分配。由于历史上形成的惯例,堆位于非初始化数据段和栈之间。


存储器分配

(1)malloc。分配指定字节数的存储区。此存储区中的初始值不确定。

(2)calloc。为指定数量具指定长度的对象分配存储空间。该空间中的每一位都初始化为0。

(3)realloc。更改以前分配区的长度。

#include <stdlib.h>

void *malloc(size_t size);

void *calloc(size_t nobj, size_t size);

void *realloc(void *ptr, size_t newisze);

void free(void *ptr);


getrlimit和setrlimit函数

每个进程都有一组资源限制,其中一些可以用getrlimit和setrlimit函数查询和更改。

#include <sys/resource.h>

int getrlimit(int resource, struct rlimit *rlptr);

int setrlimit(int resource, const struct rlimit *rlptr);

在更改资源限制时,须遵循下列三条规则:

(1)任何一个进程都可将一个软限制值更改为小于或等于其硬限制值。

(2)任何一个进程都可降低其硬限制值,但它必须大于或等于其软限制值。

(3)只有超级用户进程可以提高硬限制值。

0 0
原创粉丝点击