(一)发行版:Ubuntu16.04.7
(二)记录:
(1)什么是进程
程序是编译过的二进制文件,是静态的。进程指的是正在运行的程序,是动态的。
(2)什么是进程ID
每个进程都有一个唯一的标识符,既进程ID,简称pid。
(3)进程间的通信的几种方法
管道通信:有名通道,无名通道
信号通信:信号的发送,信号的接受,信号的处理
IPC通信:共享内存,消息队列,信号灯
Socket通信(网络通信)
(4)进程的三种状态:
阻塞态:等待阻塞结束即可进入就绪态
就绪态:只需要事件片达到即可变为执行态
执行态:正在执行进程
(5)进程的控制
a.创建进程的函数
fork函数,头文件<unistd.h>
函数原型: pid_t fork(void)
返回值:fork函数有三种返回值,在父进程中,fork返回新创建的子进程的PID,在子进程中,fork返回0,如果出现错误,fork返回一个负值。
父进程创建子进程
b.获得pid函数
getpid():获得当前进程的PID
getppid():获得当前进程的父进程的PID
c.创建进程示例
#include <stdio.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
pid=fork();
if(pid<0){
printf("fork is error.\n");
return -1;
}
//父进程
if(pid>0)
printf("This is a parent process,parent_pid: %d\n",getpid());
//子进程
if(pid==0)
printf("This is a child process,child_pid: %d\nparent_pid: %d\n",getpid(),getppid());
return 0;
}
按理来说,不会同时满足pid>0和pid==0,但是现在有两个进程,同样的代码,父进程会判断pid>0,子进程会判断pid==0,所以就会都执行,两个进程各满足一个条件。父进程和子进程基本是一样的类似于拷贝,但是父进程和子进程的pid号不同。子进程从创建他的地方开始执行代码(fork()的地方)。
d.父子进程也会抢夺cpu资源
(三)命令: