controlling-terminal

如果作为 init 调用,为什么 bash 不能将 ^C 映射到 intr 信号?
controlling-terminal

如果作为 init 调用,为什么 bash 不能将 ^C 映射到 intr 信号?

如果我将 bash 作为第一个调用的进程(即作为 init),结果它将显示以下内容: init: cannot set terminal process group (-1): Inappropriate ioctl for device init: no job control in this shell 并且没有信号(例如^C、^Z)起作用。 通过阅读bash-5.1.12的源码,问题定位在job.c4501行的表达式上: (t = tcgetpgrp (shell_tty)) == -1 错误值为ENOTTY,表示调用进程没有控制终端。 为什么 B...

Admin

如何将 C 程序的输出从 /dev/tty 重定向到 /dev/null?
controlling-terminal

如何将 C 程序的输出从 /dev/tty 重定向到 /dev/null?

考虑这个示例 C 程序,它写入/dev/tty但没有命令行选项来阻止它这样做。 #include <stdio.h> int main (void) { FILE* fout = fopen("/dev/tty", "w"); fprintf(fout, "Hello, World!\n"); fclose(fout); } 我如何将其输出重定向到/dev/nullshell 脚本中? PS我读过这个答案,但我不太明白。无论如何,我期待一个不会修改程序代码源的答案。 ...

Admin

显示服务器控制终端
controlling-terminal

显示服务器控制终端

当我登录 Fedora 31 工作站并运行 ps 命令时,我看到以下输出; 对于 X 会话: PID TT CMD ... 1 ? /usr/lib/systemd/systemd --switched-root --system --deserialize 29 ... 820 ? /usr/sbin/gdm 1305 ? gdm-session-worker [pam/gdm-password] 1346 tty2 /usr/libexec/gdm-x-session --run-script ...

Admin

X 客户端进程是否总是有一个或多个 GUI 窗口?
controlling-terminal

X 客户端进程是否总是有一个或多个 GUI 窗口?

X 客户端进程是否总是有一个或多个 GUI 窗口? 相反,如果一个进程有一个或多个 GUI 窗口,它是 X 客户端进程吗? X 客户端从来没有控制终端吗? “控制终端”的概念仅适用于没有 GUI 窗口的进程吗? 谢谢。 ...

Admin

我当前的控制终端和`/dev/tty`之间有什么关系?
controlling-terminal

我当前的控制终端和`/dev/tty`之间有什么关系?

在 Lubuntu 18.04 上,我在 lxterminal 中运行 shell。它的控制终端是当前的伪终端从机: $ tty /dev/pts/2 我想知道我当前的控制终端/dev/pts/2和/dev/tty. /dev/tty就像我当前的控制终端一样/dev/pts/2: $ echo hello > /dev/tty hello $ cat < /dev/tty world world ^C 但它们似乎是不相关的文件,而不是一个到另一个的符号链接或硬链接: $ ls -lai /dev/tty /dev/pts/2 ...

Admin

当会话领导者获取控制终端时,会话中的其他现有进程如何也获取控制终端?
controlling-terminal

当会话领导者获取控制终端时,会话中的其他现有进程如何也获取控制终端?

假设有一个会话,其中有多个进程并且没有控制终端。 当会话领导者创建到控制终端的连接时, 同一会话中的其他进程如何得知该会话有一个控制终端并且 他们怎么也能使用控制终端呢? 我提出这个问题的原因如下。通常,进程调用setsid()启动新会话并成为其领导者,并调用open()连接到控制终端。然后会话领导者继续处理fork()子进程,子进程将文件描述符继承到控制终端。 然后我想知道如果一个会话已经有多个进程但没有控制终端,然后领导者创建到控制终端的连接,然后会话中的其他进程怎么办? 谢谢。 ...

Admin

不。
controlling-terminal

不。

来自 Linux 编程接口 在交互式 shell 中,这三个文件描述符 0、1 和 2 通常指的是运行 shell 的终端。 “运行 shell 的终端”是否是指交互式 shell 所属会话的控制终端? 如果是,如果 shell 的会话没有控制终端怎么办? 当从其父进程创建 shell 时,在以下每种情况下,shell 是否会自动在文件描述符 0、1 和 2 与终端之间创建连接(从 shell 的父进程继承): 如果“shell 运行所在的终端”或控制终端已在非 0、1 和 2 的文件描述符处打开? 如果文件描述符 0、1 和 2 已经连...

Admin

“控制终端”只是供用户控制吗?
controlling-terminal

“控制终端”只是供用户控制吗?

我可以终止进程并使用 向它们发送信号kill,所以我不需要controlling terminal(或ctty) 。那么.. 的目的controlling terminal仅仅是为了对用户的推动做出反应吗?将Ctrl-C按键转换为SIGINT(“嘿,停下来!”)并检测键盘后面的操作员是否还活着(“键盘已分离 -SIGHUP伙计”)? 文档充满了无法回答“为什么它在这里?”这个问题的细节,除了我之外,这对每个人来说都是显而易见的。 ...

Admin

背景、僵尸、守护进程和无 ctty - 这些概念有联系吗?
controlling-terminal

背景、僵尸、守护进程和无 ctty - 这些概念有联系吗?

这些过程概念如何关联在一起 - background、zombie、daemon和without controlling terminal? 我觉得它们在某种程度上很接近,特别是通过 的概念controlling terminal,但仍然没有太多信息可供我讲述一个故事,就像您需要向正在阅读有关 Linux 的文章的孩子解释一些内容而不撒太多谎一样。 更新#1:例如(我不知道这是不是真的) background-- zombie- 前台进程不能成为zombie,因为它zombie是一个没有父进程的后台进程 daemon-- without ctty- ...

Admin

没有控制终端的进程
controlling-terminal

没有控制终端的进程

当进程在没有控制终端的情况下运行时会发生什么?该流程与标准流程有何不同?它失去了哪些功能,又获得了哪些功能? 更新#1 该问题被列为可能的重复问题:Unix 中控制终端的概念不包含答案。另外,另一个问题太宽泛,根本没有提到流程质量。 ...

Admin

键盘输入总是通过控制终端吗?
controlling-terminal

键盘输入总是通过控制终端吗?

我说得对吗,所有从键盘输入的输入都会经过一个控制终端?这意味着如果程序在没有控制终端的情况下运行,它将无法接收任何用户输入。这适用于 Linux 中的每种程序吗? 更新#1:为了澄清问题,我的Python寻呼机模块stdin 重定向时崩溃: $ ./pager.py < README.rst ... File "pager.py", line 566, in <module> page(sys.stdin) File "pager.py", line 375, in page if pagecallback(pa...

Admin

列出所有进程而不控制终端(仅)?
controlling-terminal

列出所有进程而不控制终端(仅)?

有没有一种便携的方法可以做到这一点? 在 Linux 上,我可以使用,ps a -N 但此选项在其他 (POSIX) 系统上不可用。 当然我可以使用grep '^?'with,-o tty,...但是有更可靠的东西吗? ...

Admin

如何获取控制终端的真实姓名?
controlling-terminal

如何获取控制终端的真实姓名?

如何获取控制终端的真实名称(如果有,否则出错)作为路径名? 我所说的“真实姓名”是指 not /dev/tty,其他任意进程不能使用它来引用同一终端。如果可能的话,我更喜欢将答案作为简单的 shell 代码(如下面的示例),否则作为 C 函数。 请注意,即使标准输入被重定向,这也必须起作用,因此该tty实用程序无法使用:not a tty在这种情况下会出现错误,因为tty只打印连接到标准输入的终端的文件名。 在Linux下,可以使用: echo "/dev/`ps -p $$ -o tty | tail -n 1`" 但这是不可移植的,根据 PO...

Admin