我试图了解CTRL+ 如何C终止子进程而不是父进程.我在一些脚本shell中看到了这种行为,比如bash你可以在哪里开始一个长时间运行的进程然后通过输入来终止它CTRL- C然后控制返回到shell.
你能解释它是如何工作的,特别是为什么父(shell)进程没有终止?
shell是否必须对CTRL+ C事件进行一些特殊处理,如果是,它究竟是做什么的?
为了找到getline()面对EOF 的行为,我写了以下测试:
int main (int argc, char *argv[]) {
size_t max = 100;
char *buf = malloc(sizeof(char) * 100);
size_t len = getline(&buf, &max, stdin);
printf("length %zu: %s", len, buf);
}
Run Code Online (Sandbox Code Playgroud)
而input1是:
abcCtrl-DEnter
结果:
length 4: abc //notice that '\n' is also taken into consideration and printed
Run Code Online (Sandbox Code Playgroud)
输入2:
abcEnter
完全相同的输出:
length 4: abc
Run Code Online (Sandbox Code Playgroud)
似乎EOF被遗漏了getline()
所以我发现它的源代码getline()和后续内容是它的一个相关片段(我省略了一些注释和不相关的代码以简洁):
while ((c = getc (stream)) != EOF)
{ …Run Code Online (Sandbox Code Playgroud)