标签: controlling-terminal

请解释 ps -ef 命令的这个输出?

ps -ef命令的部分输出如下所示:

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2012 ?        00:00:01 init [3]         
root         2     1  0  2012 ?        00:00:01 [migration/0]
root         3     1  0  2012 ?        00:00:00 [ksoftirqd/0]
root         4     1  0  2012 ?        00:00:00 [watchdog/0]
root         5     1  0  2012 ?        00:00:00 [events/0]
root         6     1  0  2012 ?        00:00:00 [khelper]
root         7     1  0  2012 ?        00:00:00 [kthread]
root         9     7  0  2012 ?        00:00:00 [xenwatch]
root        10     7  0 …
Run Code Online (Sandbox Code Playgroud)

process ps command controlling-terminal

22
推荐指数
3
解决办法
12万
查看次数

Unix中控制终端的概念

有人可以以一种易于理解的方式解释在unix和unix类系统中控制终端的概念吗?它与会话有关吗?如果是,那么如何?

terminal job-control session controlling-terminal

20
推荐指数
1
解决办法
5352
查看次数

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

如何获得控制终端的真实名称(如果有,否则为错误)作为路径名?

“实名”是指 not /dev/tty,其他任意进程不能使用它来指代同一个终端。如果可能,我更喜欢将答案作为简单的 shell 代码(如下例所示),否则作为 C 函数。

请注意,即使标准输入被重定向,这也必须工作,因此tty无法使用该实用程序:not a tty在这种情况下会出现错误,因为tty只打印连接到标准输入的终端的文件名。

在 Linux 下,可以使用:

echo "/dev/`ps -p $$ -o tty | tail -n 1`"
Run Code Online (Sandbox Code Playgroud)

但这不是可移植的,因为根据 POSIX,终端名称的格式是 unspecified

关于 C 函数,ctermid (NULL)returns/dev/tty在这里没用。

注意:根据zsh文档,应该能够做到

zsh -c 'echo $TTY'
Run Code Online (Sandbox Code Playgroud)

但是当标准输入和标准输出都被重定向时,当前(版本 5.0.7)会失败:

$ zsh -c 'echo $TTY > /dev/tty' < /dev/null
/dev/pts/9
$ zsh -c 'echo $TTY > /dev/tty' < /dev/null > /dev/null
/dev/tty
Run Code Online (Sandbox Code Playgroud)

shell terminal tty controlling-terminal

13
推荐指数
2
解决办法
4290
查看次数

调用与控制终端断开连接的命令/脚本?

我正在调查通常作为自动化进程(例如 cron、Jenkins)运行的脚本的行为。脚本可以(最终)调用以交互方式运行时行为不同(寻求用户输入)的命令;例如,patch会询问如何处理反向补丁,并svn询问密码,但我需要看看当它们以非交互方式运行时会发生什么。

说服patch它是非交互式的相当容易;我只需要重定向stdout为非 tty:

$ </dev/null > >(cat) /path/to/myscript --args
Run Code Online (Sandbox Code Playgroud)

但是svn,如果存在,将连接到控制终端;编辑要通过的脚本--non-interactive并不是一个真正的选择,因为这来自多个层次,很难确定我是否找到了每个调用。

有没有办法在没有控制终端的情况下以非交互方式调用脚本/命令(所以/dev/tty不存在)?我更喜欢 stdout/stderr 仍然去我的终端。

(我发现了在非交互式 shell 中运行脚本的问题但该问题的答案讨论了 cron 和用户环境之间的差异;我已经消除了除非交互性之外的所有差异。)

process terminal tty interactive controlling-terminal

9
推荐指数
1
解决办法
7995
查看次数

如何将 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);
}
Run Code Online (Sandbox Code Playgroud)

如何将它的输出重定向到/dev/nullshell 脚本中?

PS我读了这个答案,但我不太明白。无论如何,我希望得到一个不会修改程序代码源的答案。

shell c io-redirection tty controlling-terminal

9
推荐指数
1
解决办法
1184
查看次数

背景、僵尸、守护进程和没有 ctty - 这些概念是否相关?

这些过程的概念是如何关联在一起- ,,和?backgroundzombiedaemonwithout controlling terminal

我觉得它们在某种程度上很接近,尤其是通过 , 的概念controlling terminal,但是我仍然没有太多信息可以讲故事,就像您需要向阅读有关 Linux 的文章的孩子解释一些事情而不会撒谎。

更新 #1:例如(我不知道这是不是真的)

  • background---zombie前台进程不能成为zombie,因为zombie是一个没有父进程的后台进程
  • daemon- without ctty-所有daemons无运行ctty,但不是所有的过程,而不cttydaemons
  • background- daemon-一个background process可以被检索到交互方式重新运行,daemon is not
  • zombie- without ctty-zombie如果有无所谓ctty连接到它或不
  • background- without ctty-processes发送到后台,而他们有ctty,如果成为守护进程或模具ctty是从他们采取

job-control background-process daemon zombie-process controlling-terminal

8
推荐指数
1
解决办法
2175
查看次数

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

在 Lubuntu 18.04 上,我在 lxterminal 中运行了一个 shell。它的控制终端是当前的伪终端从机:

$ tty
/dev/pts/2
Run Code Online (Sandbox Code Playgroud)

我想知道我当前的控制终端/dev/pts/2/dev/tty.

  1. /dev/tty就像我当前的控制终端/dev/pts/2

    $ echo hello > /dev/tty
    hello
    
    $ cat < /dev/tty
    world
    world
    ^C
    
    Run Code Online (Sandbox Code Playgroud)
  2. 但它们似乎是不相关的文件,而不是一个符号链接或硬链接到另一个:

    $ ls -lai /dev/tty /dev/pts/2
     5 crw--w---- 1 t    tty 136, 2 May 31 16:38 /dev/pts/2
    13 crw-rw-rw- 1 root tty   5, 0 May 31 16:36 /dev/tty
    
    Run Code Online (Sandbox Code Playgroud)

对于不同控制终端的不同会话,if /dev/tty保证是它们的控制终端。它如何成为不同的控制终端,而不是符号链接或硬链接?

那么它们之间的关系和区别是什么?任何帮助深表感谢!

这篇文章来自于较早的一个命令`tty`和文件`/dev/tty`的输出都是指当前bash进程的控制终端吗?

tty controlling-terminal pseudoterminal

8
推荐指数
2
解决办法
1384
查看次数

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

从键盘输入的所有输入都通过控制终端是否正确?这意味着如果程序在没有控制终端的情况下运行,它将无法接收任何用户输入。这是否适用于 Linux 中的每种程序?

更新 #1:为了澄清这个问题,当 stdin 被重定向时,我的 Python 寻呼机模块崩溃了

$ ./pager.py < README.rst
...
  File "pager.py", line 566, in <module>
    page(sys.stdin)
  File "pager.py", line 375, in page
    if pagecallback(pagenum) == False:
  File "pager.py", line 319, in prompt
    if getch() in [ESC_, CTRL_C_, 'q', 'Q']:
  File "pager.py", line 222, in _getch_unix
    old_settings = termios.tcgetattr(fd)
termios.error: (25, 'Inappropriate ioctl for device')
Run Code Online (Sandbox Code Playgroud)

这是因为我尝试获取描述符以将键盘输入设置为fd = sys.stdin.fileno(). 当stdin被重定向,它的文件描述符不再与任何键盘输入相关联,因此试图设置它失败input-output control的错误。

我被告知要得到这个controlling terminal …

terminal ioctl controlling-terminal

2
推荐指数
1
解决办法
1686
查看次数