我正在创建一个shell程序,我希望 Ctrl+C 可以杀掉前台进程但不会影响后台进程,例如: &sleep 50
是一个后台进程,如果我使用 Ctrl+C ,它将只杀死前台进程,而不影响后台进程。但是我真的想不出该怎么做,请大家帮帮忙:D
int main(void) {
Command cmd;
int n, forSignals;
char **cmds;
char **pipedCmds;
signal(SIGINT, INThandler);
while (!done) {
char *line;
line = readline("> ");
if (!line) {
done = 1;
} else {
stripwhite(line);
if(*line) {
add_history(line);
n = parse(line, &cmd);
PrintCommand(n, &cmd);
cmds = getCmds(cmd.pgm);
pipedCmds = getPipedCmds(cmd.pgm);
executionDecider(line, cmds, pipedCmds, cmd);
}
}
if(line) {
free(line);
}
}
return 0;
}
void INThandler(int sig)
{
signal(sig, SIG_IGN);
kill(SIGINT, 0);
printf("\n");
}
顺便提一下,当然还有实际执行程序的其余代码,如果需要展示,请告诉我,但我认为这是一个很好的可以最小化重现问题的例子。
编辑:非常重要,不知道我怎么会忘记了 :/ 但我需要它不要通过这种方式创建僵尸进程,它不应该留下任何僵尸进程。
编辑:请找到链接到完整项目代码的URL。 在那里可能更有意义: https://codedump.io/share/d8hrj40JdEqL/1/lshc---c-shell-program
Command
和其他缺失的函数吗? - S.S. Anne