0
点赞
收藏
分享

微信扫一扫

Linux系统编程 ---- 终端、进程组、会话

Linux 终端、进程组、会话


终端(Computer terminal),是与计算机系统相连的一种输入输出设备,通常离计算机较远。在UNIX系统中,用户通过终端登录系统后创建一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal)。进程中,控制终端是保存在PCB中的信息,而fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。

目录


前言

每个进程的标准输入、标准输出和标准错误输出都默认指向指向控制终端,进程从标准输入读也就是读用户的键盘输入,进程往标准输出或标准错误输出写也就是输出到显示器上。

在控制终端输入一些特殊的控制键可以给前台进程发信号,例如Ctrl+C表示SIGINT,Ctrl+\表示SIGQUIT。


终端相关函数

功能:

  • 由文件描述符查出对应的文件名

参数:

  • fd:文件描述符

返回值:

  • 成功:终端名 失败:NULL

在这里插入图片描述



进程组

在这里插入图片描述


创建父子进程同时工作

在这里插入图片描述

在这里插入图片描述
通过kill命令将进程组内所有进程杀死
在这里插入图片描述


在这里插入图片描述



会话

在这里插入图片描述


创建会话的注意事项


  • 调用进程不能是进程组组长,该进程变成新会话首进程(session header)
  • 该调用进程是组长进程,则出错返回
  • 该进程成为一个新进程组的组长进程
  • 需有root权限(ubuntu系统可以不需要)
  • 新会话丢弃原有的控制终端,该会话没有控制终端
  • 建立新会话时,先调用fork,父进程终止,子进程调用setsid


会话相关函数


getsid 函数

在这里插入图片描述
功能:
     获取进程所属的会话ID
参数:
    pid:进程号,pid为0表示查看当前进程session ID
返回值:
    成功:返回调用进程的会话ID    失败:-1



setsid 函数

在这里插入图片描述

功能:
     创建一个会话,并以自己的ID设置进程组ID,同时也是新会话的ID。调用了setsid函数的进程,既是新的会长,也是新的组长。
参数:
     void
返回值:
     成功: 返回调用进程的会话ID     失败: -1

举报

相关推荐

0 条评论