进程与线程
进程线程对比
| 线程 | 进程 | |
|---|---|---|
| 粒度 | 任务调度与执行的最小单位 | 资源分配的最小单位 |
| 资源 | 独享:栈、线程ID、寄存器组的值、错误返回码、信号屏蔽码 | 共享:堆、全局变量、静态变量、文件等公共资源、进程代码段、进程当前所在目录等信息 |
进程通信方式
管道

父子进程间使用单向通信的管道(pipe)进行通信。
管道实际上是一种内核中的缓存,创建的管道所携带的文件描述符 fd[0] 和 fd[1] 分别代表读、写端。
由于管道是单向的,如果要实现双向管道则需要两个管道,并分别禁用两个进程的读、写端。
在 Linux 中,常用的
|就是一种匿名管道(ps aux | grep java),通过 shell 创建了两个 shell 的子进程,这两个进程通过一个匿名管道进行通信。 如果使用命名管道,可以使用mkfifo <管道名>命令创建,并使用echo "<内容>" > <管道名>命令写入管道,使用cat < <管道名>命令取出管道内数据。
死锁条件
- 互斥:一个资源只能给一个进程使用;
- 占有并等待:进程持有资源并申请新资源,在申请到需要的资源之前,已有的资源不释放;
- 不可剥夺:进程申请到的资源在使用完之前,不可以被其他进程使用;
-
Linux相关命令
进程相关
top -p <pid>:动态地监视进程活动与系统负载等信息- p:按PID展示。
free -m:查看内存使用情况。ps -aux/ps -ef:显示进程相关信息- a:显示所有进程;
- u:用户及其他信息;
- x:显示未控制终端的进程;
- e:全部进程;
- f:全格式。
kill -<signal> <pid>:- signal:发送给进程的信号
- 默认15为可以阻塞的停止;
- 9为强制立刻停止;
- 2为中断(即Ctrl+C);
- 19为暂停(即Ctrl+Z)。
- pid:进程ID,通过ps可以查看。
- signal:发送给进程的信号
lsof -i:<port>:查看哪个进程占用port端口号。chmod:修改用户权限。wc -o:统计单词个数- 结合
| grep <单词> <文件路径>使用。
- 结合
