Unix高级编程之进程环境

进程:运行的程序
线程:运行的函数

1.main()
      启动例程
      exit(int main(argc, argv));
2.进程终止
进程正常终止:
<1>main() return;
<2>exit(3);
    1)调用终止处理程序
    2)标准IO清理程序
<3>_exit(2) _Exit(2);
<4>最后一个线程调用pthread_exit(3);
<5>最后一个线程从启动例程返回
异常终止:
<1>abort(3);
<2>线程对取消作出响应
<3>信号终止

atexit(3);
钩子函数
注册函数执行的顺序与其注册的顺序是相反的
执行条件:main()函数调用return, 或者任意位置调用exit(3);

3.环境变量和环境表
"name=value"
getenv(3);
setenv(3);

4.命令行参数的解析
int getopt(int argc, char **argv, const char *optstring);
argc 和 argv就是main()函数的两个参数
optstring有一下规则:
"-ab:c::"
<1>以"-"开头表示可以解析非选项参数,返回1
<2>"a"解析选项参数"-a",返回‘a‘
<3>"b:"解析带参数选项"-b argument",返回‘b‘,optarg指向argument
<4>"c::"解析可带参数的选项"-cargument",返回‘c‘,optarg指向argument,入没有参数optarg==NULL

作业:
# ./a.out -Y 4 -M -D -h24 filename

strftime(3);

getopt_long(3);
能解析长格式选项
--help
--help arg
--help=arg

ls -l /etc/passed
gcc hello.c -Wall
tar -cvf bao.tar file1 file2 file3
-l:选项参数
/etc/passwd:非选项参数
-W:带参数的选项 参数all
-f:带参数的选项 参数bao.tar

5.c存储分布布局

6.共享库
手工装载库
dlopen();
dlsym();
dlclose();

7.setjmp()和longjmp()
setjmp(), longjmp()实现函数之间的跳转
goto实现在函数内部跳转

8.getrlimit(2)和setrlimit(2)

时间: 2024-08-11 18:03:17

Unix高级编程之进程环境的相关文章

Unix环境高级编程(五)进程环境

本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制. main函数的原型为int main(int argc,char *argv[]);其中argc是命令行参数的数目,argv是指向参数的各个指针构成的数组.当内核执行C程序时,使用一个exec函数,在调用main函数前线调用一个特殊的启动例程,从内核获取命令行参数和环境变量. 进程终止分为正常终止和异常

Unix高级编程之进程控制

进程控制 ps auxps axjps axfps axm 一.进程标识符 pid_t ---->long int 进程的独一无二的标识 0 调用进程(内核) 1 init进程(用户态所有进程的祖先进程) getpid(2); getppid(2); 进程的状态 S 可中断的睡眠态 R 运行态 D 不可中断的睡眠态 T 停止态 X 终止态 Z 僵尸态进程优先级 s 会话组长 l 多线程 < 高优先级 N 低优先级 + 在前台进程组 二.fork(2)父子进程之间的不同: <1>pi

&lt;unix高级编程&gt;笔记 chapter1

os严格上是软件,为计算机提供资源和app运行环境. 特称为内核. 内核的接口被成为system call;然后库函数对system call进行了封装;shell是特殊app,为运行其他程序提供了一个接口. shell是个命令行解释器,读取输入,执行命令. unix文件系统是由directory和file组成.目录起点成为root,名字是/. 文件属性指类型\大小\所有者\权限以及修改时间.stat和fstat返回文件属性的结构. 比如下面操作: 2.文件名 只有/和null不能出现在文件名里

unix高级编程中的一个头文件 apue.h 与一个差错文件error.c 的内容

在查看unix高级编程中的代码时,如果我们编写书中的代码,发现一般都会报错,这是因为作者在写这本书时,他自己编写了一个头文件,跟一个差错处理文件,出来处理他自己的代码错误信息: 下面我们来看下代码的内容: 我实现第一个代码,关于文件的打开,实现 ls 命令的代码: #include "apue.h"#include <stdio.h>#include <dirent.h> int main(int argc, char *argv[]){ DIR *dp; st

看unix高级编程时遇到apue.h找不到的问题

一开始看到这本书,刚翻了几页,就觉得对味.按照书中的代码做练习时,编译代码文件提示fatal error: apue.h: No such file or directory.翻看书的附录B,可以看到apue.h的资料,原来作者是为了减少书中示例代码的长度,将很多包含头文件的代码封装到了apue.h 这个文件. 下载源码 从unix高级编程书籍官网下载书籍的上的所有源码. wget http://www.apuebook.com/src.tar.gz 解压这个文件 tar -zxvf src.t

UNIX 高级编程(第二版) apue.h配置问题

在第二版的UNIX高级编程中,apue.h头文件下载后,编译过程中出现无法编译的问题,解决方法如下: 在http://www.apuebook.com/下载src.tar.gz源代码的压缩包. 1.解压至/home/user/目录下 2.修改 Make.defines.linux中的WKDIR=/home/xxx/apue.2e,为WKDIR=/home/user/apue.2e 3.返回至apue.2e目录下面,修改linux.mk,将里面的nawk全部改为awk,可以使用这个命令 :%s/n

Unix环境高级编程(八)进程关系

本章看后给人似懂非懂的感觉,主要是不知道实际当中如何去使用.通过前面几章的学习,每个进程都有一个父进程,当子进程终止时,父进程得到通知并取得子进程的退出状态.先将本章基本的知识点总结如下,日后再看时候好好总结一下. 1.终端登录 介绍了有终端登录Unix系统的过程.通过init进程读文件/etc/ttys,fork一个子进程调用exec执行getty程序进行登录,当用户输入完用户名后,getty的工作完成了,然后调用login程序,类似execle("/bin/login","

Unix环境高级编程(六)进程控制

本章介绍Unix的进程控制,包括进程创建,执行程序和进程终止,进程的属性,exec函数系列,system函数,进程会计机制. 1.进程标识符 每一个进程都有一个非负整数标识的唯一进程ID.ID为0表示调度进程,即交换进程,是内核的一部分,也称为系统进程,不执行任何磁盘操作.ID为1的进程为init进程,init进程不会终止,他是一个普通的用户进程,需要超级用户特权运行.获取标识符函数如下: #include <sys/types.h>#include <unistd.h> pid_

unix环境高级编程之进程

每个进程都有一个非负整型表示的唯一进程ID.但是进程ID是可重用的.ID为0的进程通常是调度进程,也叫叫唤进程,该进程是内核的一部分.进程1通常是init进程,在自举过程结束时由内核调用(/sbin/init中). 附注 ^(* ̄(oo) ̄)^ : c程序的存储空间布局: 1)正文段                                       2)初始化数据段 3)非初始化数据段 4)栈 5)堆 从图中可看到,未初始化数据段的内容并不存放在磁盘上的程序文件中.因为:内核在程序开始