(三)和菜鸟一起学习unix之创建进程 fork getpid getppid
2012-10-14 18:20
239 查看
(1 )进程基本环境
进程是程序的一次执行,是运行在自己的虚拟地址空间的一个具有独立功能的程序。进程是分配和释放资源的基本单位, 当程序执行时, 系统创建进程,分配内存和cpu资源;系统结束时,系统回收这些资源。
(2 )进程概念
进程通常是由程序,数据和进程控制块(pcb)三个部分组成。其中,程序部分描述了进程所要完成的功能,数据部分为进程提供了运行所需的堆栈和私有数据;进程控制块则含有进程的描述和控制信息,集中反映进程的动态特性,是系统识别和控制进程的依据。
(3 )进程定义:
进程是一个具有一定独立的功能程序,关于某个数据集合的一次运行活动
(4 )进程的状态及其转换
1.进程基本状态
(1)就绪状态
当进程已经分配到除处理机以外的所有必要的资源后,只要再获得处理机便可立即执行。
(2)执行状态
执行状态是指进程已经获得处理机,其程序正在执行的状态。
(3)阻塞状态
正在执行的进程因发生某时间而暂时无法继续执行时,便放弃处理机而处于暂停状态。
(5)父子进程
进程采用树型结构管理,当一个进程启动另一个进程时,被启动的进程就是子进程,原进程就是父进程。在UNIX中使用系统调用fork创建进程。fork复制了父进程的数据,堆栈和进程环境,因此,子进程继承了父亲的某些环境,并且共享了父进程的代码段。但子进程也拥有自己的环境,父子进程进程以并行的方式执行同一程序的不同分支。
UNIX 中存在一个标识符为 1 的进程 init,它是计算机中除了sysproc 外其他所有进程的父进程。
man fork:
FORK(2) Linux Programmer’s Manual FORK(2)
NAME
fork - create a child process //创建一个子进程
SYNOPSIS //头文件
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
RETURN VALUE
On success, the PID of the child process is returned in the parent’s
thread of execution, and a 0 is returned in the child’s thread of exe-
cution. On failure, a -1 will be returned in the parent’s context, no
child process will be created, and errno will be set appropriately.
功能:创建一个子进程
返回值:子进程返回0 ,父进程返回子进程的ID,出错返回-1;
GETPID:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
功能:获取当前进程ID
返回:进程ID
GETPPID:
#include <sys/types.h>
#include <unistd.h>
pid_t getppid(void);
功能:获取父进程ID
返回:父进程ID
例子:
1 #include<sys/types.h>
2 #include<stdio.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5 int main(void)
6 {
7 pid_t pid;
8 pid = fork();
9 switch(pid)
10 {
11 case -1:
12 perror("error:");
13 exit(1);
14 break;
15 case 0:
16 printf("当前进程ID %d, 父进程ID %d\n",getpid(),getppid());
17 break;
18 default:
19 printf("当前进程ID %d, 父进程ID %d\n",getpid(),getppid());
20 }
21 }
进程是程序的一次执行,是运行在自己的虚拟地址空间的一个具有独立功能的程序。进程是分配和释放资源的基本单位, 当程序执行时, 系统创建进程,分配内存和cpu资源;系统结束时,系统回收这些资源。
(2 )进程概念
进程通常是由程序,数据和进程控制块(pcb)三个部分组成。其中,程序部分描述了进程所要完成的功能,数据部分为进程提供了运行所需的堆栈和私有数据;进程控制块则含有进程的描述和控制信息,集中反映进程的动态特性,是系统识别和控制进程的依据。
(3 )进程定义:
进程是一个具有一定独立的功能程序,关于某个数据集合的一次运行活动
(4 )进程的状态及其转换
1.进程基本状态
(1)就绪状态
当进程已经分配到除处理机以外的所有必要的资源后,只要再获得处理机便可立即执行。
(2)执行状态
执行状态是指进程已经获得处理机,其程序正在执行的状态。
(3)阻塞状态
正在执行的进程因发生某时间而暂时无法继续执行时,便放弃处理机而处于暂停状态。
(5)父子进程
进程采用树型结构管理,当一个进程启动另一个进程时,被启动的进程就是子进程,原进程就是父进程。在UNIX中使用系统调用fork创建进程。fork复制了父进程的数据,堆栈和进程环境,因此,子进程继承了父亲的某些环境,并且共享了父进程的代码段。但子进程也拥有自己的环境,父子进程进程以并行的方式执行同一程序的不同分支。
UNIX 中存在一个标识符为 1 的进程 init,它是计算机中除了sysproc 外其他所有进程的父进程。
man fork:
FORK(2) Linux Programmer’s Manual FORK(2)
NAME
fork - create a child process //创建一个子进程
SYNOPSIS //头文件
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
RETURN VALUE
On success, the PID of the child process is returned in the parent’s
thread of execution, and a 0 is returned in the child’s thread of exe-
cution. On failure, a -1 will be returned in the parent’s context, no
child process will be created, and errno will be set appropriately.
功能:创建一个子进程
返回值:子进程返回0 ,父进程返回子进程的ID,出错返回-1;
GETPID:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
功能:获取当前进程ID
返回:进程ID
GETPPID:
#include <sys/types.h>
#include <unistd.h>
pid_t getppid(void);
功能:获取父进程ID
返回:父进程ID
例子:
1 #include<sys/types.h>
2 #include<stdio.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5 int main(void)
6 {
7 pid_t pid;
8 pid = fork();
9 switch(pid)
10 {
11 case -1:
12 perror("error:");
13 exit(1);
14 break;
15 case 0:
16 printf("当前进程ID %d, 父进程ID %d\n",getpid(),getppid());
17 break;
18 default:
19 printf("当前进程ID %d, 父进程ID %d\n",getpid(),getppid());
20 }
21 }
相关文章推荐
- 和菜鸟一起深入学习国嵌实验之进程创建,exec函数,进程等待
- 和菜鸟一起深入学习国嵌实验之进程创建,exec函数,进程等待
- (三)和菜鸟一起学习unix 进程终止
- (三)和菜鸟一起学习unix 僵尸进程
- linux学习-进程创建(fork,wait,waitpid)
- 进程学习4--fork创建进程
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- Linux基础学习系列:对于fork()函数的学习,及进程创建相关知识
- Linux基础学习系列:对于fork()函数的学习,及进程创建相关知识
- Linux多进程开发(一)进程创建之fork的学习
- (一)和菜鸟一起学习unix之文件I/O:write read lseek
- UNIX环境高级编程学习之第九章进程关系-创建孤儿进程
- 菜鸟fork()创建进程新见解
- 进程操作篇atexit execl exit fprintf fscanf getpid nice get priority printf setpid system vfork wait waitpid
- 进程创建fork 、getpid 、getppid
- 进程操作篇atexit execl exit fprintf fscanf getpid nice get priority printf setpid system vfork wait waitpid
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
- (二)和菜鸟一起学习unix之文件和目录 getcwd,chdir
- LINUX内核分析第六周学习总结——进程的描述和进程的创建