语法:
pid_t tcgetpgrp(int fd);
在手册页:
函数tcgetpgrp()返回与fd关联的终端上前景进程组的进程组ID,该进程组必须是调用进程的控制终端。
因此,利用这一功能可以得到终端的前台处理过程。但是我不明白哪个文件描述符被传递给这个函数。传递给这个函数的文件描述符的用途是什么?为什么?
发布于 2015-10-26 11:08:22
2004年版第6期IEEE 1003.1号开放组基础规范指出:
11.1.2进程组 终端可以具有与其相关联的前景进程组。这个前台进程组在处理产生信号的输入字符方面起着特殊的作用,这一点在特殊字符中已经讨论过了。
tcgetpgrp
是一个函数,它可以返回附加到给定终端的这个组的ID。参数必须是与终端相关联的文件描述符,更重要的是,它必须是进程的控制终端的描述符:
11.1.3控制终端 终端可以属于作为其控制终端的进程。具有控制终端的会话的每个进程具有相同的控制终端。
简而言之,控制终端是允许您管理shell中作业的对象:分派CTRL来挂起作业,使作业成为前台作业,用CTRL取消作业等。控制终端允许控制连接到该终端的进程组。该控件可以包括:对终端的并发访问、会话管理、前台/后台等。
ctermid
可能会给出控制终端的路径(tty
命令行也会这样做)。请注意,控制终端可能与您制作标准I/O的终端不同,但通常是相同的。然后(通常)可以使用STDIN_FILENO (以及另外两个)。还可以使用isatty
来确定文件描述符是否与终端相关联。
发布于 2015-10-26 10:25:40
你可以这样说:
#include <unistd.h>
pid_t pid = tcgetpgrp(STDIN_FILENO);
https://stackoverflow.com/questions/33343265
复制相似问题