如何确定Linux TTY是否正在控制进程组

use*_*104 5 c linux process tty

所以我有一个tty(让我们说/ dev/tty5)并且想要知道它当前是否是进程组或会话的控制tty,或者它是否当前是无主的.POSIX有两个API函数,它们在这里建议:tcgetpgrp()和tcgetsid(),这两个函数只有在调用者将tty作为控制tty的情况下才有效 - 在这种情况下,它们使得它们几乎无用(实际上我不是t看到tcgetsid()的重点.

任何人都有一个建议,我如何能够以一种理智的方式从C中检测终端当前是否是一个进程的控制终端?我只关心Linux,所以如果需要特定于Linux的API,那对我来说没问题.

jim*_*ara 1

BSD: int ioctl(int tty, TIOCGETPGRP, int *foreground_group);

Linux: int tcgetpgrp(int tty, int *foreground_group);

仅当您拥有非拥有终端的权限(即您是 root)时,Linux 才能工作。这是有意的安全实施。BSD ioctl() 允许任何 tty 将任何进程组(甚至不存在的进程组)作为其前台 tty。POSIX 只允许访问以 tty 作为其控制 tty 的进程组。此限制不允许 BSD ioctl 中存在一些不明确和破坏安全的情况。

你想做什么?如果您是传递信号的内核,那么您只应该担心进程控制 tty。

编辑:我忘记了 /proc
来自 www.die.net:/proc/[number]/fd 这是一个子目录,其中包含进程打开的每个文件的一个条目,由其文件描述符命名,并且是指向的符号链接实际文件。因此,0 是标准输入,1 是标准输出,2 是标准错误,等等。