我不确定如何使用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。如果您知道该怎么做,请帮助我。 提前表示感谢!