wxvirus wxvirus
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

无解的lifecycle

let today = new Beginning()
首页
  • Go文章

    • Go语言学习
  • Rust

    • Rust学习
  • Java

    • 《Java》
  • Python文章

    • Python
  • PHP文章

    • PHP设计模式
  • 学习笔记

    • 《Git》
  • HTML
  • CSS
  • JS
  • 技术文档
  • GitHub技巧
  • 刷题
  • 博客搭建
  • 算法学习
  • 架构设计
  • 设计模式
  • 学习
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • C&C++

  • PHP

    • PHP基础或常见方法

    • Laravel

    • ThinkPHP

    • PHP多进程编程

      • 程序与进程
      • PHP解释器的执行过程
      • 进程环境
      • 解释器文件
      • 进程标识与fork
      • 进程退出
      • 进程exec
      • 进程调度
      • 多进程编写
      • SUID特权进程
      • 进程查看
      • 中断信号
      • 进程关系与守护进程
      • 进程组
      • 会话
        • 会话
      • 守护进程
      • 作业控制
      • 进程间通信
    • swoole

  • Python

  • Go

  • microservice

  • rust

  • Java

  • 学习笔记

  • 后端
  • PHP
  • PHP多进程编程
wxvirus
2022-06-01

会话

# 会话

会话就是一个进程组或多个进程组的集合;

  1. 一个会话可以至少有一个控制终端、伪终端

  2. 一个会话至少有一个前台进程组【前台:指能输入能执行命令的bin/bash】,其他的都是后台进程组

  3. 一个会话如果连接了一个控制终端,就叫控制进程;因为这个会话首进程bin/bash是连接控制终端的【伪终端设备驱动程序 + TCP/IP 对端的 SSH Client】,所以创建的子进程也会继承这个父进程的控制终端【0,1,2 标准输入,标准输出,标准错误】;因为连接了终端,所以在终端的输入会影响前台进程组,如:ctrl c

<?php


function showPID()
{
    $pid = posix_getpid();
    fprintf(STDOUT, "pid=%d, ppid=%d, gpid=%d, sid=%d\n",
        $pid, posix_getppid(), posix_getpgid($pid), posix_getsid($pid));
}


$pid = pcntl_fork();
showPID();

while (1) {
    sleep(1);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

运行

[root@jb51 process]# php demo19.php
pid=26214, ppid=24901, gpid=26214, sid=24901
pid=26215, ppid=26214, gpid=26214, sid=24901
1
2
3

这 2 个子进程会集成bin/bash父进程的一些属性,比如组 ID,SID,以及文件描述符:0,1,2【控制终端】,bin/bash你可以叫他一个会话,一个会话首进程,一个控制进程。

cd /proc/26215
file exe
1
2

就可以看到是链接的bin/bash

可以使用如下命令来查看进程的情况

ps -exj
1

可以知道该进程的PID、PPID、PGID、SID以及这个进程是哪个UID用什么COMMAND在什么时间启动的,状态是STAT[S,T,D,R],该进程还连接了哪个终端【你可以认为连接了哪个输入单元,可以简单的认为是你的显示器和键盘,但是是由内核的伪终端设备驱动程序虚拟出来的】

24901 26214 26214 24901 pts/2    26214 S+       0   0:00 php demo19.php XDG_SESSION_ID=163175 HOSTNAME=jb51.net TERM=xterm SHELL=/bin/bash HI
26214 26215 26214 24901 pts/2    26214 S+       0   0:00 php demo19.php XDG_SESSION_ID=163175 HOSTNAME=jb51.net TERM=xterm SHELL=/bin/bash HI
1
2

流程

编辑 (opens new window)
上次更新: 2022/06/01, 23:40:03
进程组
守护进程

← 进程组 守护进程→

最近更新
01
vue3配合vite初始化项目的一些配置
07-26
02
网盘系统开发学习
07-24
03
linux多进程
06-19
更多文章>
Theme by Vdoing | Copyright © 2021-2024 wxvirus 苏ICP备2021007210号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式