句法:
pid_t tcgetpgrp(int fd);
在MAN页面中:
The function tcgetpgrp() returns the process group ID of the foreground process group on the terminal associated to fd, which must be the controlling terminal of the calling process.`
因此,使用此功能,我们可以获得终端的前台进程.但是我不知道哪个文件描述符传递给该函数.传递给此函数的文件描述符有什么用途,为什么?
解决方法:
开放组基础规范第6期
IEEE Std 1003.1,2004 Edition说:
11.1.2 Process Groups
A terminal may have a foreground process group associated with it.
This foreground process group plays a special role in handling
signal-generating input characters, as discussed in Special
Characters.
tcgetpgrp是可以返回附加到给定终端的该组的ID的函数.该参数必须是与终端相关联的文件描述符,除此之外,它还必须是该过程的控制终端的描述符:
11.1.3 The Controlling Terminal
A terminal may belong to a process as its controlling terminal. Each
process of a session that has a controlling terminal has the same
controlling terminal.
简而言之,控制终端是使您可以在Shell中管理作业的对象:调度CTRL-Z暂停作业,使作业成为前台作业,使用CTRL-C取消作业等.控制终端使您可以控制与此终端相连的一组进程.该控件可以包括:对终端的并发访问,会话管理,前台/后台等.
ctermid可能会为您提供控制终端的路径(tty命令行也是如此).请注意,控制终端可能与您在其上进行标准I / O的终端不同,但通常情况是相同的.然后,您可以(通常)使用STDIN_FILENO(以及另外两个).您还可以使用isatty确定文件描述符是否与终端关联.
标签:stdio,unix,c-3,linux 来源: https://codeday.me/bug/20191119/2036888.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。