如何使我的shell实现在两个Ctrl + C信号后终止Node.JS?

时间:2016-05-26 11:44:01

标签: c node.js shell signals

#include <stdio.h>
#include <sys/wait.h>

int main (int argc, char** args){
    char *buffer = (char*) malloc(2048);
    char *cmd = (char*) malloc(2048);
    pid_t pid;
    while(1) {
        printf("!! ");
        fgets(buffer, 1024, stdin);
        if( buffer[0] != '\n') {
            pid = fork();
            if( pid == 0){
                buffer[strlen(buffer)-1] = '\0';
                execvp(buffer, args);                
                exit(1);
            }else if(pid > 0){
                waitpid(pid, 0, WUNTRACED);
            }
        }
    }
    return 0;
}

我知道上面的代码很难看,但是我想展示原始代码的简化版本,所以我尽可能简化它,但我也表现出问题。

好的,所以我正在测试我的shell: 我编了。 我跑了,然后:

!! racket。它给了我:

!! racket
Welcome to Racket v6.2.
> 

没关系。而且,重要的是,我能够使用Ctrl-C完成此过程。当我把Ctrl-C:

!! racket
Welcome to Racket v6.2.
> ^C
user break
  context...:
   /usr/local/share/racket/collects/racket/private/misc.rkt:87:7
>
$ ( this dolar is from my bash)

所以它也像我们期望的那样工作。但问题在于js。我的意思是 js = nodejs - Server-side JavaScript。问题出在哪儿?让我们看看:

   !! js
>

看起来好像。但是,当我把:Ctrl-C:

!! js
> 
(^C again to quit)
> 

好的,我再说一次:Ctrl-C:

!! js
> 
(^C again to quit)
> 
> 

并且它没有完成一个过程。它的作品。这是一个问题。我不明白这种行为,我不知道如何修复它。 P.S在bash / zsh中可行。

0 个答案:

没有答案