问题是标题。我不明白为什么在执行“ls”后终端会立即关闭。Linux shell 是这样的:
1.while (1) {
2. char *cmd = read_command();
3. int child_pid = fork();
4. if (child_pid == 0) {
5. exec(cmd);
6. }else {
7.waitpid(child_pid);
8.}
9.}
因此,如果我们在 shell 中运行 'exec ls',则 cmd 是一个 'exec ls' 字符串。第 3 行创建了一个子进程。在第 5 行,exec(cmd) 将替换子进程,但不会影响父进程。如果父进程不受影响,那为什么终端会关闭呢?
请告诉我上面推理中的缺陷。