GNU/Linux - 进程关联的控制终端

Controlling terminal
在类 Unix 操作系统中,控制终端是与进程组相关联的终端设备,它控制着进程与终端输入和输出的交互。控制终端通常是启动进程的终端。它负责处理进程的输入(如键盘输入)和输出(如显示文本)。
A controlling terminal is the terminal device associated with a process group in Unix-like operating systems, which controls the process's interaction with the terminal input and output. The controlling terminal is typically the terminal from which a process was started. It is responsible for handling input (like keyboard input) and output (like displaying text) for the process.
Controlling Terminal in Practice

  1. 在终端中启动进程:
  • 在 Linux 系统上打开一个终端(如 `bash` 或 `sh`)并运行一个命令(如 `vim`、`cat` 或任何脚本)时,该终端就会成为 shell 进程和从该 shell 启动的任何进程的控制终端。
  1. Starting a Process in a Terminal:
  • When you open a terminal (like `bash` or `sh`) on a Linux system and run a command (e.g., `vim`, `cat`, or any script), the terminal becomes the controlling terminal for the shell process and any processes started from that shell.
  1. 交互式程序:
  • 假设你打开一个终端,运行 `vim` 来编辑一个文件:
    vim example.txt
  • 在这里,你输入命令的终端是 `vim` 进程的控制终端。您键入的输入会发送到 `vim`,而 `vim` 的输出会显示在该终端上。
  1. Interactive Programs:
  • Suppose you open a terminal and run `vim` to edit a file:
    vim example.txt
  • Here, the terminal where you typed the command is the controlling terminal for the `vim` process. Input you type is sent to `vim`, and output from `vim` is displayed on that terminal.
  1. 无控制终端(守护进程示例):
  • 许多服务器进程或守护进程在启动时没有控制终端。典型的例子是启动时启动的服务或由系统管理器(如 `systemd`)启动的服务。这些进程通常与任何终端分离,以确保它们不会意外接收或需要终端输入。
  • 例如,像 Apache 这样的网络服务器是作为后台进程启动的,没有控制终端:
    apachectl start
  • apache进程在后台运行,与终端分离,这意味着它没有控制终端。
    注意,使用"&"启用后台进程时,控制终端是仍然存在的。后台进程不直接接收当前终端的输入。
  1. No Controlling Terminal (Daemon Example):
  • Many server processes or daemons are started without a controlling terminal. This is typical for services started at boot time or by a system manager like `systemd`. These processes are usually detached from any terminal to ensure they don't accidentally receive or require terminal input.
  • For example, a web server like Apache is started as a background process with no controlling terminal:
    apachectl start
  • The `apache` process runs in the background, detached from the terminal, meaning it has no controlling terminal.
  1. 使用 `O_NOCTTY`:
  • 如果编写的程序要打开终端设备(如串行端口),但又不想让终端设备成为进程的控制终端,则可以使用 `O_NOCTTY` 标志。
  • 例如
    int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
  • 这将确保打开串行端口 `/dev/ttyS0`,但它不会成为打开该端口的进程的控制终端。
  1. Using `O_NOCTTY`:
  • If you write a program that opens a terminal device (like a serial port) but doesn't want the terminal device to become the controlling terminal for the process, you use the `O_NOCTTY` flag.
  • For instance:
    int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
  • This ensures that the serial port `/dev/ttyS0` is opened, but it does not become the controlling terminal for the process that opened it.
    Why Is This Important?
    控制终端的概念对于信号处理、作业控制以及与终端的交互都很重要。例如,"SIGINT"(通过按下 "Ctrl+C "产生)等信号会发送到控制终端的进程组。如果进程没有控制终端,它就不会从终端接收此类信号,而这些信号对于进程在后台或作为守护进程时的行为至关重要。
    The concept of a controlling terminal is important for signal handling, job control, and interaction with the terminal. For example, signals like `SIGINT` (generated by pressing `Ctrl+C`) are sent to the process group of the controlling terminal. If a process doesn't have a controlling terminal, it won't receive such signals from the terminal, which can be crucial for how a process behaves in the background or as a daemon.
相关推荐
我的K84095 分钟前
Flink整合Hudi及使用
linux·服务器·flink
19004315 分钟前
linux6:常见命令介绍
linux·运维·服务器
Camellia-Echo22 分钟前
【Linux从青铜到王者】Linux进程间通信(一)——待完善
linux·运维·服务器
Linux运维日记33 分钟前
k8s1.31版本最新版本集群使用容器镜像仓库Harbor
linux·docker·云原生·容器·kubernetes
我是唐青枫42 分钟前
Linux dnf 包管理工具使用教程
linux·运维·服务器
编程修仙2 小时前
Collections工具类
linux·windows·python
芝麻团坚果2 小时前
对subprocess启动的子进程使用VSCode python debugger
linux·ide·python·subprocess·vscode debugger
写点什么啦2 小时前
[debug]不同的window连接ubuntu的vscode后无法正常加载kernel
linux·vscode·ubuntu·debug
wellnw2 小时前
[ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
linux·ubuntu
不爱学习的YY酱2 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统