当前位置: 首页 > article >正文

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.
2. 交互式程序:
   - 假设你打开一个终端,运行 `vim` 来编辑一个文件:
vim example.txt
     
   - 在这里,你输入命令的终端是 `vim` 进程的控制终端。您键入的输入会发送到 `vim`,而 `vim` 的输出会显示在该终端上。
2. 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.
3. 无控制终端(守护进程示例):
   - 许多服务器进程或守护进程在启动时没有控制终端。典型的例子是启动时启动的服务或由系统管理器(如 `systemd`)启动的服务。这些进程通常与任何终端分离,以确保它们不会意外接收或需要终端输入。
   - 例如,像 Apache 这样的网络服务器是作为后台进程启动的,没有控制终端:
apachectl start
     
   - apache进程在后台运行,与终端分离,这意味着它没有控制终端。
注意,使用“&”启用后台进程时,控制终端是仍然存在的。后台进程不直接接收当前终端的输入。
3. 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.
4. 使用 `O_NOCTTY`:
   - 如果编写的程序要打开终端设备(如串行端口),但又不想让终端设备成为进程的控制终端,则可以使用 `O_NOCTTY` 标志。
   - 例如
int fd = open(“/dev/ttyS0”, O_RDWR | O_NOCTTY);
     
   - 这将确保打开串行端口 `/dev/ttyS0`,但它不会成为打开该端口的进程的控制终端。
4. 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.

http://www.kler.cn/news/292569.html

相关文章:

  • centos7.9搭建mysql5.6
  • 无论是速卖通、敦煌网、国际站,自养号测评就是提高曝光的利器!
  • 支付宝直付通与微信收付通分账产品:功能差异与适用场景
  • 感知机模型
  • springboot小儿推拿培训系统
  • 蓝牙--关于bta_av_api.cc 文件的讲解
  • java使用jedis连接redis
  • Mac剪贴板管理器:扩展你的复制粘贴能力
  • 卷积公式的几何学理解
  • 硬件工程师笔试面试——继电器
  • windows清理图标缓存
  • 如何实现对窗口window的viewtree进行dump Hierarchy-安卓framework实战开发
  • HarmonyOS开发实战( Beta5版)状态管理优秀实践
  • 二、搭建网站服务器超详细步骤——部署轻量应用服务器(Centos)
  • ceph中pg与pool关系
  • SQL常见100面试题解析
  • vs2019编译opencv+contribute+gpu
  • 【华为OD】2024D卷——查找众数与中位数
  • MacBook真的不能打游戏吗?Mac打游戏会损坏电脑吗?苹果电脑怎么玩游戏
  • 如何在 Java 中实现线程安全的单例模式?
  • 前端宝典二十七:React Native最佳实践实例推荐
  • 强化网络安全:通过802.1X协议保障远程接入设备安全认证
  • 迭代器 Iterator 是什么?
  • Linux修改docker默认存储目录(/var/lib)
  • Twitter上品牌安全指标的关键显示错误已修正
  • 2024跨境旺季营销:哪个平台是流量之王?
  • Ribbon负载均衡底层原理
  • 配置阿里云千问大模型--环境变量dashscope
  • 基于Openface在ubuntu上抽取人脸图像
  • 02【SQL sever 2005数据库安装教程】