【发布时间】:2019-08-19 17:19:46
【问题描述】:
我们以这个sn-p为例:
#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 之前不显示在屏幕上。
对正在发生的事情有任何见解吗?
【问题讨论】:
-
OT:错误情况(pid
-
OT:关于:
int pid = fork();这应该是:pid_t pid = fork(); -
OT:在此声明之后:
execlp(argv[1], argv[1], NULL);应该有:perror( "execlp failed" ); exit( EXIT_FAILURE ); -
OT:此语句:
return 0;永远不会被执行,除非在调用fork()时出现错误,但当前代码无法让用户知道错误 -
@user3629249 你说的都是对的。我删除了一些代码以突出显示主要逻辑,不要认为错误处理与问题相关。对主要问题有任何想法吗?
标签: c multithreading terminal