Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在启用“raw()”设置的情况下终止ncurses程序?_C_Ncurses - Fatal编程技术网

如何在启用“raw()”设置的情况下终止ncurses程序?

如何在启用“raw()”设置的情况下终止ncurses程序?,c,ncurses,C,Ncurses,为了节省时间,我想知道是否有一种专业的方法可以在启用raw()设置的情况下终止(从终端)无响应的ncurses程序。在这里,CTRL+C没有帮助 示例程序: #include <ncurses.h> int main() { initscr(); raw(); while(1) { printw("Yello\n"); } refresh(); endwin(); return 0; } #包括

为了节省时间,我想知道是否有一种专业的方法可以在启用
raw()
设置的情况下终止(从终端)无响应的ncurses程序。在这里,CTRL+C没有帮助

示例程序:

#include <ncurses.h>

int main()
{
    initscr();
    raw();

    while(1)
    {
        printw("Yello\n");
    }

    refresh();
    endwin();

    return 0;
}
#包括
int main()
{
initscr();
原始();
而(1)
{
printw(“Yello\n”);
}
刷新();
endwin();
返回0;
}

每当您点击
控制-C
C-C
)组合时,终端将对其进行解析,然后向前台运行的任何应用程序发送信号(SIGINT)
Control-C
对操作系统没有特殊意义,只对终端有特殊意义

当您调用ncurses'
raw()
cbreak()
函数时,它本质上指示终端忽略这些特殊字符,并将它们直接传递给前台运行的任何程序,本质上指示终端应用程序“知道它在做什么”

因此,是的,您必须“手动”(即从另一个终端)终止正在运行的应用程序:

ps aux | grep your_executable_name
kill the_pid

是的,你可以在TTY里做这个。是的,如果锁定所有可用的TTY(并且没有SSH访问权限),您可能会阻塞整个系统。

为什么您认为^C不起作用?您只需要一个信号处理程序来捕获
SIGINT
,并在终止之前完成您需要完成的操作。@mah,但是如果程序没有内置该功能该怎么办?这是一个编程问答网站,它非常希望您有构建程序的源代码并要求更改它,因此如果您没有内置该程序,你在:)中构建它,如果你问的是一个你没有自己构建的源代码的程序,那么你可能来错了网站(但是您可以通过进程id从不同的终端终止程序,如果您在*nix系统上,并且希望修复具有终止进程的终端上的键盘i/o,则在该终端问题中,
stty sane
作为命令(即使您看不到您在其中键入的内容)@mah,那么除了从另一个终端终止程序外,没有更快捷、更简单的方法来终止程序?这就是我想知道的。TY供您输入。