首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中的tcgetpgrp函数

C中的tcgetpgrp函数
EN

Stack Overflow用户
提问于 2015-10-26 10:18:29
回答 2查看 772关注 0票数 3

语法:

代码语言:javascript
运行
复制
   pid_t tcgetpgrp(int fd);

在手册页:

函数tcgetpgrp()返回与fd关联的终端上前景进程组的进程组ID,该进程组必须是调用进程的控制终端。

因此,利用这一功能可以得到终端的前台处理过程。但是我不明白哪个文件描述符被传递给这个函数。传递给这个函数的文件描述符的用途是什么?为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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来确定文件描述符是否与终端相关联。

票数 2
EN

Stack Overflow用户

发布于 2015-10-26 10:25:40

你可以这样说:

代码语言:javascript
运行
复制
#include <unistd.h>

pid_t pid = tcgetpgrp(STDIN_FILENO);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33343265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档