进程与线程

进程线程对比

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

进程通信方式

管道

8-%E7%AE%A1%E9%81%93-pipe-shell.jpg.webp
父子进程间使用单向通信的管道(pipe)进行通信。
管道实际上是一种内核中的缓存,创建的管道所携带的文件描述符 fd[0] 和 fd[1] 分别代表读、写端。
由于管道是单向的,如果要实现双向管道则需要两个管道,并分别禁用两个进程的读、写端。

在 Linux 中,常用的 | 就是一种匿名管道(ps aux | grep java),通过 shell 创建了两个 shell 的子进程,这两个进程通过一个匿名管道进行通信。 如果使用命名管道,可以使用 mkfifo <管道名> 命令创建,并使用 echo "<内容>" > <管道名> 命令写入管道,使用 cat < <管道名> 命令取出管道内数据。

死锁条件

  1. 互斥:一个资源只能给一个进程使用;
  2. 占有并等待:进程持有资源并申请新资源,在申请到需要的资源之前,已有的资源不释放;
  3. 不可剥夺:进程申请到的资源在使用完之前,不可以被其他进程使用;
  4. 循环等待:各个进程的资源请求形成首尾连接循环等待。

    Linux相关命令

    进程相关

  5. top -p <pid>:动态地监视进程活动与系统负载等信息

    1. p:按PID展示。
  6. free -m:查看内存使用情况。
  7. ps -aux/ps -ef:显示进程相关信息
    1. a:显示所有进程;
    2. u:用户及其他信息;
    3. x:显示未控制终端的进程;
    4. e:全部进程;
    5. f:全格式。
  8. kill -<signal> <pid>
    1. signal:发送给进程的信号
      1. 默认15为可以阻塞的停止;
      2. 9为强制立刻停止;
      3. 2为中断(即Ctrl+C);
      4. 19为暂停(即Ctrl+Z)。
    2. pid:进程ID,通过ps可以查看。
  9. lsof -i:<port>:查看哪个进程占用port端口号。
  10. chmod:修改用户权限。
  11. wc -o:统计单词个数
    1. 结合| grep <单词> <文件路径>使用。