UNIX环境高级编程-读书笔记-进程

11 篇文章 0 订阅
7 篇文章 0 订阅

进程

1.进程就是CPU处理事务的一个过程
2.一个进程独占一段内存空间,独占CPU

进程的开始:
1.对于一个C程序,从main 函数开始,或者是从fork()函数开始
进程的创建:
1.对于整个的OS,init 进程是自举 其他进程都由其父进程创建
说明:init进程是在系统开始的时候自己创建出来的进程 也是第一个进程
其进程ID是 1.
进程的结束:
1.正常结束:从main函数结束, 或者是调用了exit()族函数
2,异常结束:有信号终止

exit() 和_exit() 函数的区别:
1._exit()函数直接进入内核,结束进程
2.exit()函数是先进行一些必要的处理操作,然后在进入内存
处理操作:1.关闭未关闭的文件 2.关闭进程的终止处理函数
进程终止处理函数:就是在进程结束是会自动调用的函数。
注册一个终止处理函数:使用 atexit()
int atexit(void (*function)(void));
参数就是一个函数指针。

执行的时候,是先注册的后运行,后注册的先运行

进程id
在OS中,一个进程有一个唯一的进程ID,来标识该进程
类型是pid_t
查看当前OS运行的进程使用命令:#ps

查看进程id的一些函数:
getpid(); 获取当前进程的id
getppid(); 获取父进程的id
getpgid(); 获取当前进程的组id
getsid(); 获取会话id
getuid(); 获取执行当前进程的用户id
getgid(); 获取执行当前进程的用户的组id

进程的创建:
函数:pid_t fork(void);

1.被创建的子进程继承父进程的地址空间,包括栈,堆, 静态区 代码段等
2. fork函数执行一次,返回两次,子进程返回 0 父进程返回 子进程的ID
3.父子进程的执行的先后的顺序是由系统调度决定的。
4.虽然子进程拷贝了父进程的地址空间,但是父子进程对这段内存空间是独占的
5.对于文件描述符,子进程相当于是dup了父进程的描述符
父子进程关闭文件描述符,对别的进程没有影响 因为是独占的,父子进程共享fork前
打开的描述符的偏移量

孤儿进程:
父进程结束但是子进程还没有结束。我们把这样的进程叫做孤儿进程
在linux下面,所有的孤儿进程都会被init进程收养,也就是说,所有的孤儿进程的
ppid都是 1.
僵尸进程:
子进程已经结束,但是父进程没有为其收尸,我们把这个子进程叫做僵尸进程。
如果父进程没有即使的给结束的子进程收尸,那么在进程结束的时候,会给所有的子进程收尸.

子进程的收尸:
函数:
1.pid_t wait(int *status);
返回值:收拾子进程的进程id
status:返回尸体中的信息

注意:
1.如果没有未收尸的僵尸子进程,但是有子进程,wait函数会阻塞,直到有子进程推出为止。
2.如果没有未收尸的僵尸子进程,也没有wait函数会直接返回-1,

2.pid_t waitpid(pid_t pid, int *status, int options);
pid:指定为某一个子进程收拾
-1 任意的子进程

0 指定收尸
=0 当前进程组的所有的子进程
<-1 |pid|的进程组的所有的子进程
status: 返回信息

options:附加选项
WNOHANG 提供了wait的非阻塞版本,如果有子进程但是没有僵尸进程,则此函数直接返回 0

exec()族函数:让当前进程去执行一个其他程序
int execve(const char *filename, char *const argv[], char *const envp[]);
int execl (const char *path, const char *arg, …);
int execlp(const char *file, const char *arg, …);
int execle(const char path, const char *arg, …, char const envp[]);
int execv (const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);

v:命令行参数采用char**的参数形式传递
l:命令行参数采用列表形式传递
p:执行命令时可以不是用绝对路径
e:多出一个envp(环境变量)

exec()族函数的返回值
失败时返回-1 成功不返回(用新的程序完全替换当前进程)
替换不包括:pid 文件描述符

fork()+exec()+wait() == system()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值