一、进程属性
在vim里面写代码的时候如果想要查man手册,不需要退出“:!man 函数名”就可以跳转到man手册,“q”退出;
标识符:
- PPID:parents PID (父进程)【pid_t getppid(void)】,如我们用shell连接Linux服务器,会自动给我们创建一个命令行解释器的进程“bash”,之后我们的指令/可执行程序,都会是它的子进程,只要不断开连接PPID不会变;
- PID:pid_t getpid(void);
创建进程:
- ./可执行程序 或者 指令 —— 指令级别创建进程
- pid_t fork(void) —— 代码层面创建进程
pid_t fork(void) 函数:
- 创建一个当前进程的子进程,给当前进程返回子进程的PID,给新创建的子进程返回0。
- fork()函数后面的代码父子进程共用,在fork()函数内部创建好子进程后的代码也是父子进程共用,因此可以实现返回两个不同的值;
- 给父进程返回子进程的PID是为了标定子进程,而子进程的父进程只有一个不需要标定;
- 对于数据,采用的是数据层面的写时拷贝,即需要修改的时候拷贝;
- 至于什么时候运行哪个进程是由调度器(算法)决定的,非人为可以控制,调度器的基本原则是尽量平均;
进程状态:
- 新建状态:/
- 运行状态(R): 在运行队列中排队的进程的状态都是运行态,随时都可以被调度;
每一个进程最多在CPU上呆时间片那么长的时间就会被替换,防止一个进程卡死,所有进程都无法运行的情况;在一段时间后,所有的进程都会被执行一遍,这种运行方式叫并发执行;这种运行方式会产生大量把进程载入/载出CPU的行为,这种行为叫进程切换;
- 阻塞状态:在硬件的等待队列中排队的进程,都处于阻塞状态;
- 挂起状态:CPU内存资源不足时会将闲置的阻塞状态的进程的代码和数据放入到磁盘中释放内存资源,这样的进程就是挂起状态;写入/写出磁盘的动作叫换入/换出;
- 终止状态:/