Articles of sigint

为什么在按Ctrl + C时Linux总是输出“^ C”?

我一直在研究Linux的信号。 我已经完成了一个testing程序来捕获SIGINT。 #include <unistd.h> #include <signal.h> #include <iostream> void signal_handler(int signal_no); int main() { signal(SIGINT, signal_handler); for (int i = 0; i < 10; ++i) { std::cout << "I'm sleeping…" << std::endl; unsigned int one_ms = 1000; usleep(200* one_ms); } return 0; } void signal_handler(int signal_no) { if (signal_no == SIGINT) std::cout << "Oops, you […]

SIGINT处理和getline

我写了这个简单的程序: void sig_ha(int signum) { cout<<"received SIGINT\n"; } int main() { string name; struct sigaction newact, old; newact.sa_handler = sig_ha; sigemptyset(&newact.sa_mask); newact.sa_flags = 0; sigaction(SIGINT,&newact,&old); for (int i=0;i<5;i++) { cout<<"Enter text: "; getline(cin,name); if (name!="") cout<<"Text entered: "<<name; cout<<endl; } return 0; } 如果我在程序等待input时按下ctrl-c,则会得到以下输出: input文字:收到SIGINT input文字: input文字: input文字: input文字: (程序继续循环而不等待input) 我该怎么办?

我可以发送一个ctrl-C(SIGINT)到Windows上的应用程序吗?

我有(过去)编写的跨平台(Windows / Unix)应用程序,从命令行启动时,以相同的方式处理用户键入的Ctrl – C组合(即干净地终止应用程序)。 是否有可能在Windows上发送一个Ctrl – C / SIGINT /等同于另一个(不相关的)进程的进程来请求它干净地终止(给它一个整理资源的机会等)?

相当于“SIGINT”(posix)信号,用于捕获Windows / MinGW下的“CTRL + C”

我正在windows下移植一个Linux / gcc程序,并为这两个程序实现了通用的exception处理。 我想知道MinGW / gcc的SIGINT信号相当于什么。 下面是我在Linux下如何处理它: static void handler(int sig) { // Catch exceptions switch(sig) { case SIGABRT: fputs("Caught SIGABRT: usually caused by an abort() or assert()\n", stderr); break; case SIGFPE: fputs("Caught SIGFPE: arithmetic exception, such as divide by zero\n", stderr); break; case SIGILL: fputs("Caught SIGILL: illegal instruction\n", stderr); break; case SIGINT: fputs("Caught SIGINT: […]

Node.js:从process.kill()发送的SIGINT无法处理

我在Windows 8.1 x64上使用Node.js v0.10.31。 我注意到,对于处理SIGINT处理程序的进程(node.js或python脚本),当信号从另一个node.js进程(由process.kill(PID, "SIGINT")处理)发送时,不会调用该处理程序process.kill(PID, "SIGINT")从而导致它终止。 但是,我确实证实,如果通过在控制台中按CTRL-C发送SIGINT,则会调用处理程序。 这里是处理SIGINT (CoffeeScript)的Node.js脚本: process.on 'SIGINT', -> console.log "SIGINT handled" process.stdin.pipe(process.stdout) console.log "PID: #{process.pid}" 控制台输出: PID: 6916 SIGINT handled (this happens when pressing ctrl-c in console) SIGINT handled (this happens when pressing ctrl-c in console) # process terminates when another process calls process.kill(6916, 'SIGINT') 这里是一个处理SIGINT的python脚本,它也被node.js process.kill(PID, 'SIGINT')无条件地杀死: from signal […]