c - 使用 execvp 执行我在数组中的命令

标签 c linux process command exec

我有一个命令数组,我想执行这个数组中的每个命令,但我似乎无法让它工作,所以我有

childPid = fork();


for(int i =0;i < numOfCommands;i++)
{
    if(childPid == 0)
    {
        execvp(commands[i], argv);
        perror("exec failure");
            exit(1);
    }
    else 
    {
        wait(&child_status);
    }


}

这是做什么的,它只执行我数组中的第一个命令,但不会继续执行,我将如何继续?

如果我想要随机执行命令的顺序并且结果混合在一起怎么办,那么我必须使用 fork 吗?

最佳答案

如果您想执行多个程序,无论如何都需要使用fork。来自 man exec :(强调)

The exec() family of functions replaces the current process image with a new process image.

The exec() functions return only if an error has occurred.

通过使用fork,您可以创建一个具有相同图像的新进程,您可以通过调用exec 来替换子进程中的图像,而不会影响父进程,然后可以自由地 forkexec 任意次数。

别忘了 wait让子进程终止。否则,当他们死亡时,他们将变成 zombies . wait 联机帮助页中有一个完整示例,链接在上面。

关于c - 使用 execvp 执行我在数组中的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109639/

相关文章:

c - c中strstr的复杂度是多少?

linux - BASH脚本在需要按键返回提示时调用新脚本

c - 获取 Linux 文件描述符的地址

与子进程的标准输入/标准输出异步通信

c - SPOJ - 好斗的奶牛, "largest minimum distance"术语的含义是什么?

c - 从 C 中的函数返回指针错误

c - 在 C 程序中使用 Picocom 来读/写流

windows - 如何暂停/恢复 Windows 中的进程?

c# - 如何仅终止由我的应用程序启动的进程

c - 使用 ((c1^c2) & ~32) 测试 c1 和 c2 在不同情况下是否是相同的字符