问题
tcgetpgrp的man页面说:
当fd指向调用进程的控制终端时,如果该终端有前台进程组ID,则函数tcgetpgrp()将返回该终端的前台进程组ID;否则将返回大于1且目前不是进程组ID的某些值。
- “某些值”的含义是什么?它似乎有歧义。
- 我如何检查它是否为有效的进程组ID或其他值?这是否意味着我必须获取系统中所有进程组的列表以确定返回值是否引用有效进程组?
背景
我尝试使用它并发现它似乎返回当前会话ID。我尝试了很多次,它总是返回当前会话ID。
“某些值”是否意味着当前会话ID?还是这是一个特殊情况?或者我的代码有缺陷?
环境和代码
环境:libc 2.1.2,Linux 2.6.32
代码:
int main(int argc, char *argv[])
{
return getgroup(argc, argv);
}
int getgroup(int argc, char *argv[])
{
if (fork()) {
return OK;
}
sleep(5);
printf("process %d fork, ppid %d, pgid %d, psid %d \n", getpid(), getppid(), getpgid(getpid()), getsid(getpid()));
pid_t gid = tcgetpgrp(STDIN_FILENO);
printf("group id %d \n", gid);
return OK;
}
main
在哪里?),而且你运行它的方式也不清楚(为什么输出出现在shell提示符后面?)。后者尤其可能会影响输出结果。 - davmac