相关疑难解决方法(0)

Ctrl-C如何终止子进程?

我试图了解CTRL+ 如何C终止子进程而不是父进程.我在一些脚本shell中看到了这种行为,比如bash你可以在哪里开始一个长时间运行的进程然后通过输入来终止它CTRL- C然后控制返回到shell.

你能解释它是如何工作的,特别是为什么父(shell)进程没有终止?

shell是否必须对CTRL+ C事件进行一些特殊处理,如果是,它究竟是做什么的?

bash shell process sh

63
推荐指数
3
解决办法
6万
查看次数

GNU-getline:关于EOF的奇怪行为

测试

为了找到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)

c linux eof

5
推荐指数
1
解决办法
418
查看次数

标签 统计

bash ×1

c ×1

eof ×1

linux ×1

process ×1

sh ×1

shell ×1