c - 杀死子进程后终端中的不可见文本

标签 c multithreading terminal

让我们以这个片段为例:

#include <signal.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>

int main(int argc, char const *argv[]) {
    int pid = fork();
    if (pid == 0) { // Child
        execlp(argv[1], argv[1], NULL);
    } else if (pid > 0) { // Parent
        int n = atoi(argv[2]);
        sleep(n);
        kill(pid, SIGKILL);
        int status;
        wait(&status);
        ...
        exit(0);
    }
    return 0;
}

在使用 main [command] [seconds] 运行后,程序应该创建一个子进程来执行给定的命令并在 n 秒后终止它。

问题是,如果我用 args top 3 调用它,它会正确地从 top 开始并在 3 秒后终止,但我留下了一个带有不可见文本的工作 shell:我可以键入和执行命令,但在运行 reset 之前,键入的文本不会显示在屏幕上。

对正在发生的事情有任何见解吗?

最佳答案

top 将终端设置为不回显输入的模式(参见 man noechoman tcsetattr)。如果 top 干净地退出,就像当您交互地按“q”时,它会将其重置为正常模式。但是你的程序杀死了它,所以终端处于无回显模式。

关于c - 杀死子进程后终端中的不可见文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55406035/

相关文章:

c - 使用 c 的代理隧道

使用 Linux 终端运行命令的 Java 程序

c - 如何在 Rust 结构中使用 C 数组

c - malloc分配的内存在物理上不一定是连续的吗?

java - 如何为在不同线程中运行的变量实现变量更改监听器(示例)

objective-c - 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

python - 创建单例队列 Python

bash - 抑制或隐藏 Docker "Steps"和控制台中的默认输出

ruby - 就地进度输出到控制台 : How to empty the current line

c - 使用memcmp删除链表的元素