execvp(),无法直接返回命令行

execvp(), can't return to command line directly

本文关键字:返回 命令行 execvp      更新时间:2023-10-16

我正在玩execvp(),发现了一个有趣的东西,首先是代码。使用命名空间标准;

#include <iostream>
#include <unistd.h>
int main(){
    char *argv[3];
    int pid = fork();
    if (pid == 0){
    argv[0] = "ls";
    argv[1] = "-l";
    argv[2] = NULL;
    execvp("ls", argv);
    }
}

这是一个简单的fork + execvp问题,但我发现在"ls"成功执行后,我将不得不按Enter键才能返回命令行(shell)。

有谁知道我该怎么做,以便在 execvp("ls") 之后我可以回到 shell 而不会点击我的"输入"?

您的主程序在ls完成之前退出。到 ls 完成时,其输出已遮挡 shell 提示符。

您可以使用以下任一方法解决此问题:

  • if的右大括号后添加else wait(0);
  • 删除对fork()的呼叫。