不知道如何使用tcsetpgrp()

时间:2019-07-09 08:17:22

标签: c operating-system

我不确定如何使用tcsetpgrp()int tcsetpgrp(int fildes, pid_t pgid_id);,我想将前台组pid设置为孩子的新组pid,这样当我键入control-C时,它只会杀死我的孩子进程在我的终端,而不是后台终端。 (我认为当前,父组pid与外壳的前台gpid相同)

    // we are in the child process
    // check the foreground process group id.
    pid_t fore_pgid = tcgetpgrp(0);
    printf("the foregroud pgid is: %d \n", fore_pgid);
    // change the foreground process group id to the redefined child process's group pid.
    tcsetpgrp(0, child_gpid);
    fore_pgid = tcgetpgrp(0);
    printf("the foregroud pgid is: %d \n", fore_pgid);

结果:程序停留在此tcsetpgrp(0, child_gpid);行中 因为它之后没有打印出一些字符串。

请注意,以上只是我的想法,可能不正确;我不知道如何仅杀死我的子进程,而不是后台shell。如果您知道该怎么做,请帮助我。 提前表示感谢!

1 个答案:

答案 0 :(得分:0)

我不确定我是否了解您要做什么。

这是IBM所做的事的一个例子

IBM Example of tcsetpgrp()