#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中可行。