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

时间:2019-03-28 20:06:52

标签: 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来调用它,它会正确地从顶部开始并在3秒后终止,但是我剩下一个带有不可见文本的工作外壳:我可以键入和执行命令,但是键入在运行reset之前,文本不会显示在屏幕上。

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

1 个答案:

答案 0 :(得分:1)

top将终端设置为不回显输入的模式(请参见man noechoman tcsetattr)。如果top干净退出,例如您交互式按下“ q”时,它将重置为正常模式。但是您的程序会杀死它,因此终端处于无回波模式。