让我们以以下代码段为例:
#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
之前,文本不会显示在屏幕上。
对正在发生的事情有任何见解吗?
答案 0 :(得分:1)
top
将终端设置为不回显输入的模式(请参见man noecho
或man tcsetattr
)。如果top
干净退出,例如您交互式按下“ q”时,它将重置为正常模式。但是您的程序会杀死它,因此终端处于无回波模式。