所以我正在编写一个简单的shell。相关代码发布在下面。
void sig_int_handler(int signum) {
if (pid == -1) // do nothing
else kill(...);
}
signal(SIGINT, sig_int_handler);
..
while(1) {
pid = -1;
printf(COMMAND_PROMPT);
input_len = read(...);
if only enter is pressed: continue;
// parse inputs
pid = fork();
if (pid == 0) { // Do child process operations }
else if (pid > 0) { // Parent waits for child }
else {..}
}
但现在当我按下ctrl + c时,它会正确地退出孩子。但是,如果我在常规终端中按ctrl + c,它会在stdout上打印出“ctrl + c”,但之后它什么也没做。如何强制读取换行符以便它给我另一个提示?
答案 0 :(得分:2)
我假设你在这里尝试写一些类似shell的东西。
如果是这样的话:您不应该在shell中处理^ C.如果为子进程设置新的进程组(使用setpgid()
和TIOCSPGRP
),则只会收到SIGINT。