UNIX环境高级编程(八)进程控制
来源:互联网 发布:禁止吸烟网络图片大全 编辑:程序博客网 时间:2024/05/16 14:23
8.2进程标识符
每个进程都有一个非负整数表示的唯一进程ID。虽然是唯一的但是进程ID可以重用,当一个进程终止后,其进程ID可以再一次使用了。
ID为0的进程通常是调度进程,常常被称作交换进程。该进程是内核的一部分,它并不执行任何磁盘上的程序,一次被称作系统进程。
进程ID为1的是init进程,在自举过程结束后由内核调用,此进程负责在自举内核启动UNIX系统,init进程通常读与系统有关的初始化文件,并将系统引导到一个状态,init进程决不会终止。他是一个普通的用户进程。(与交换进程不同,他不是内核中的系统进程)
下面一些函数返回一些进程标识符:
#include<unistd.h>pid_t getpid(void)//返回值:调用进程的进程IDpid_t getppid(void)//返回值:调用进程的父进程ID
8.3 fork函数
一个进程可以调用fork函数创建一个新进程
#include<unistd.h>pid_t fork(void);//返回值:子进程返回0,父进程返回子进程ID,出错返回-1
将子进程ID返回给父进程的理由是:因为一个进程的子进程可以有很多个,并且没有一个函数使一个进程可以获得其所有子进程I的进程D。
fork使子进程返回0的理由是:一个进程只有一个父进程,所以子进程总是可以调用getppid以获得其父进程的进程ID。
子进程是父进程的副本。子进程获得父进程的数据空间,堆和栈的副本。父,子进程并不共享这些存储空间部分。父子进程共享正文段。
由于在fork后经常跟着exec,所以现在很多实现并不执行一个父进程数据段,堆栈的完全复制。作为替代使用了写时复制(copy-on-write)技术。这些区域由父子进程共享,而且内核将它们的访问权限改变为只读的。如果父,子进程任意一个试图改变这些区域,则内核只为修改区域的那块内存制作一个副本。
文件共享
父进程所有打开的文件描述符,都被复制到子进程中。父子进程的每个相同的打开的文件描述符共享一个文件表项
#include<sys/wait.h>pid_t wait(int *staloc)pid_t waitpid(pid_t pid,int *staloc,int options)//若成功返回进程ID,0,出错返回-1
waitpid函数中pid参数:
8.10 exec函数
使用fork函数创建子进程后,子进程往往都要调用一种exec函数以执行另一个程序,当进程调用一种exec函数时,该进程执行
的程序完全替换为新程序,新程序从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec
只是用一个全新的程序替换了当前进程的正文、数据、堆和栈。
有6种不同的exec函数可以使用,它们通常被统称为exec函数。
#inlcude <unistd.h>int execl(const char *pathname, const char *arg0, ... ,(char*)0 );int execv(const char *pathname, char *const argv[]);int execle(const char *pathname, const char *arg0, ..., (char *)0, char *const envp[]);int execve(const char *pathname, char *const argv[], char *const envp[]);int execlp(const char *filename, const char *arg0, ..., (char*)0);int execvp(const char *filename, char *const argv);//6个函数返回值:若出错则返回-1,成功则不返回值。
- UNIX环境高级编程(八)进程控制
- 《UNIX环境高级编程》八进程控制读书笔记
- UNIX环境高级编程读书笔记(八)—进程控制 (1)
- UNIX环境高级编程读书笔记(八)—进程控制 (2)
- UNIX环境高级编程读书笔记(八)—进程控制 (3)
- UNIX环境高级编程读书笔记(八)—进程控制 (1)
- UNIX环境高级编程读书笔记(八)—进程控制 (2)
- UNIX环境高级编程读书笔记(八)—进程控制 (3)
- UNIX环境高级编程读书笔记(八)—进程控制 (1)
- UNIX环境高级编程读书笔记(八)—进程控制 (2)
- UNIX环境高级编程读书笔记(八)—进程控制 (3)
- UNIX环境高级编程学习笔记(八)进程环境
- Unix环境高级编程--进程控制
- Unix环境高级编程之进程控制
- 《UNIX环境高级编程》--8进程控制
- 《Unix环境高级编程》之 进程控制
- unix环境高级编程-进程控制
- Unix环境高级编程学习笔记(五) 进程控制
- cocos2d-x的主循环和导演类
- Linux“自动备份/删除”MYSQL
- JS获取Jquery获取radio值等常用方法
- Secrets of the Ftrace function tracer
- HDU 1505
- UNIX环境高级编程(八)进程控制
- 用jointjs绘制微博关系图
- 插入排序
- 一些小技巧在布局上
- UITextView关闭键盘
- MySql数据库索引的学习
- POJ 3083Children of the Candy Corn(DFS*2+BFS)
- c++-运算符的重载
- 树莓派驱动ov7670