gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:42:33 24 4
gpt4 key购买 nike

所以我有一个 tty(比方说/dev/tty5),想知道它当前是否是进程组或 session 的控制 tty,或者它当前是否为无主。 POSIX 有两个 API 函数,它们在这里提示自己:tcgetpgrp() 和 tcgetsid(),这两个函数只有在调用者将 tty 作为控制 tty 时才有效——在这种情况下,它们几乎没有用(事实上我不根本看不到 tcgetsid() 的意义。

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

最佳答案

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

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

Linux 仅在您拥有非拥有终端的权限时才能工作,即您是根用户。这是一个有意的安全实现。 BSD ioctl() 允许任何 tty 将任何进程组(甚至不存在的进程组)作为其前台 tty。 POSIX 只允许访问将 tty 作为其控制 tty 的进程组。此限制不允许 BSD ioctl 中出现一些模棱两可和破坏安全的情况。

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

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

关于c - 如何确定 Linux TTY 是否正在控制进程组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3189787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com