c - 如何制作程序的流程?

标签 c process fork execvp

嘿,我必须为大学编写一个小型进程启动器。

#include  <stdio.h>
#include  <sys/types.h>
#include <unistd.h>

int main(int argc, char* argv[]){
    pid_t pid;


    if((pid = fork()) < 0){
        return 0;
    }
    else if(pid == 0){
        if(execvp(*argv, argv) < 0){
            return 0;
        }
    }
    return 0;
}

这是我的程序。我想将其称为 ./process-launcher firefox --browser 来启动新的 firefox 进程。

我认为当我这样启动程序时,我的系统监控中应该有一个firefox的进程,但事实并非如此

我如何得到这个?

编译:

clang -o process-launcher process-launcher.c

最佳答案

*argv 里有什么?您的启动器名称...

因此,当按原样执行代码时,您只需重新启动启动器...

解决方案:++argv;,它将第二个参数传递给execvp:

#include  <stdio.h>
#include  <sys/types.h>
#include <unistd.h>

int main(int argc, char* argv[]){
    pid_t pid;

    if((pid = fork()) < 0){
        return 0;
    }
    else if(pid == 0){

        ++argv;

        printf("execvp(%s, ...)\n", *argv);
        if(execvp(*argv, argv) < 0){
            return 0;
        }
    }
    return 0;
}

关于c - 如何制作程序的流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089599/

相关文章:

c - 我如何在客户端-服务器应用程序中异步发送文件?(使用 winsock2.h,在 C 中)

C:为什么 size_t 不是 C 关键字?

c - 实现 (.c) 文件与其自身的定义 (.h) 文件冲突

c# - "StandardOut has not been redirected or the process hasn' t 尚未开始"After Process.GetProcessById()

.net - 从 Process 对象获取位数(32 位/64 位)

c - 如何在 C 中舍入 Float 值

windows - 结束进程和结束进程树之间的区别

c - 多次执行fork会带来什么风险?

c - C中的进程同步不会第一次执行

php - 使用 PHP 生成多个进程来处理数据。