在我处理 SIGINT 后,C minishell 不会立即 return

C minishell does not return immediately after I handle SIGINT

我正在尝试编写一个内置功能非常有限的 minishell。但是,现在每当我处理 SIGINT 时,我都必须再次按回车键才能输入更多命令。

void loop()
{
    struct sigaction sa;
    sa.sa_handler = do_nothing;
    int exit_status;
    do
    {
        char **args;
        sigaction(SIGINT, &sa, NULL);
        my_str("\nMINISHELL: ");
        my_str(current_directory);
        my_str("/ $: ");
        args = get_args();
        exit_status = execute(args);
    }
    while(exit_status);
}
void do_nothing()
{
    my_str("\nMINISHELL: ");
    my_str(current_directory);
    my_str("/ $: ");
}

我只能使用 <unistd.h><sys/types.h><signal.h><unistd.h><sys/wait.h>,以及我使用的任何方法写。即 my_str() 只是我用 write() 系统调用实现的字符串打印语句。

请帮忙。

您未能初始化整个 sigaction struct,并且您还在处理程序中调用 I/O 函数。有关文档和设置 SIGINT 处理程序的示例,请参阅 pubs.opengroup.org。你的处理程序不应该做太多。只需设置或增加程序主循环可以响应的标志。您还应该检查 sigaction 调用中的 return 状态。