gpt4 book ai didi

c - 将作业放入前台 shell 实现的 c

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:40 25 4
gpt4 key购买 nike

我正在尝试制作我自己的 linux shell。我已经修复了 bg 命令,它正在使用此代码:

if (strcmp(worte[0], "bg")==0){
pid_t pidnumber;
pidnumber=atoi(worte[1]);
printf("PID: %d", pidnumber);
kill(pidnumber, SIGCONT);
return 0;
}

但是,fg 命令不能正常工作。当我键入“fg 12345”(12345 是进程 ID)时,它会将该进程置于前台,但我无法使用 Ctrl-Z 停止它,也无法使用 Ctrl-C。我的代码如下

if (strcmp(worte[0], "fg")==0){
pid_t pidnumber;
pidnumber=atoi(worte[1]);
tcsetpgrp(0, getpgid(pidnumber));
waitpid(getpgid(pidnumber), NULL, WUNTRACED);
tcsetpgrp(0, getpgid(shellpid));

return 0;
}

代码中worte[0]指的是fg和worte 1指的是进程 ID(例如:12345)。我该如何解决我的问题谢谢你的帮助。 Please look at the image to see my problem obviously

最佳答案

尝试忽略 SIGTTOU。

pid_t pidnumber;
pidnumber=atoi(worte[1]);
signal(SIGTTOU, SIG_IGN);
tcsetpgrp(0, getpgid(pidnumber));
signal(SIGTTOU, SIG_DFL);
waitpid(getpgid(pidnumber), NULL, WUNTRACED);
signal(SIGTTOU, SIG_IGN);
tcsetpgrp(0, getpgid(shellpid));
signal(SIGTTOU, SIG_DFL);

关于c - 将作业放入前台 shell 实现的 c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34561250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com