让我们以这个片段为例:
#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 noecho
或 man tcsetattr
)。如果 top
干净地退出,就像当您交互地按“q”时,它会将其重置为正常模式。但是你的程序杀死了它,所以终端处于无回显模式。
关于c - 杀死子进程后终端中的不可见文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55406035/