好烦啊,写了好久的文章,按了 ctrl + shift + H 莫名其妙的页面就关闭了
0 索引
1. 进程
关于进程的结构和性质,就不做过多介绍,具体的可以参考下之前的几篇文章。
通常而言,我们打开的一个软件(QQ和微信),执行的一个脚本(hello.c、hello.php/hello.java :可以当做运行的一个程序)
都是通过进程的形式。
下图:查看的是所有运行中的进程
所以无论打开图形界面一个软件,或者终端运行 ,都是包装成一个进程的形式运行
进程的退出 : 是通过信号 退出的
2. 子进程
以nginx 和 php-fpm 为例,他们都是通过父进程,fork 多个子进程。来执行并发请求。
子进程共享父进程的资源和堆栈信息,父进程便于管理子进程。
相当于同时打开多个QQ页面,每一个窗口页面和一个好友聊天,接受和发送当前好友的消息。
需要注意的是:fork 子进程,会返回二个值。 分别是当前父进程和新生成的子进程。
可以分别对他们得逻辑分别处理。
先运行父进程逻辑,再运行子进程逻辑。(当前可以通过vfork等暂停父进程的继续流程)
3. 进程的状态
3.1 进程状态
进程的系统状态有一下几种
各个状态的调用和切换如下图
IPC 进程通信,也会影响状态
3.2 查看进程的状态
PS : process status 是一个管理进程状态的内核命令
和系统状态值对应,有以下集中状态值:
最常用的,我们运行的状态值
- R : 可运行
- l : 表示进程是多线程的
PS的参数信息:
-a 是所有的终端
-A: 包括内核的
-r : running 包括正在运行的
-o : 分类输出
3.3 proc
proc 里面包含什么信息
3.4.1 查看程序的执行文件
3.4.2 查看cmd
3.4.3 查看进程打开的文件
参考nginx 打开的文件
4. 简单介绍终端
在介绍终端之前,先简单的介绍下控制台。
如下图所述,控制台一般在服务器独享,客户端连接的地方是终端,可以有多个。
4.1 控制台:
4.2 终端在内核中的分类:
二者之间的关系:
4.3 不同的终端
- 虚拟终端: tty1-tty6 可以通过快捷键切换
- 伪终端 PTY SSH 的界面都是伪终端
伪终端的架构
// 查看当前终端名
tty
5. 进程组
6. 会话
默认打开一个 bash 和一个虚拟终端 /dev/tty1
构成了一个回话。(用户登录)
bash : 就是一个shell 进程
然后敲命令:就是重新开启新的进程组
7. 进程的切换
使用伪终端
ctrl + c 终止后
s + 代表 又返回了前台进程组了
ctrl + c : 发给了前台进程组了
然后通过shell 切换到了新的前台控制组
没有登录的终端,没有bash
8. shell
不断的循环这个过程
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。