使用 posix_spawn 启动进程

Starting a process using posix_spawn

本文关键字:启动 进程 spawn posix 使用      更新时间:2023-10-16

我正在使用以下代码在 Linux 中启动新进程

pid_t processID;
char *argV[] = {"192.168.1.40",(char *) 0};
int status = -1;
status = posix_spawn(&processID,"/home/user/application",NULL,NULL,argV,environ);
if(status == 0)
     std::cout<<"Launched Application";
else
     std::cout<<"Launching application Failed";

应用程序确实启动,但显示没有命令行参数。posix_spawn参数中的错误是什么?

posix_spawn手册页:

参数 argv 是一个指针,指向以 null 结尾的字符指针数组,这些数组指向以 null 结尾的字符串。 这些字符串构造要提供给新进程的参数列表。 数组中至少必须存在 argv[0],并且应该包含正在生成的程序的文件名,例如 path 或 file 参数的最后一个组件。

正在发生的事情是,在启动过程中,argv[0]将被192.168.1.40而不是可执行文件的名称,并且之后程序没有参数。

所以改变:

 char *argV[] = {"192.168.1.40",(char *) 0};

自:

char *argV[] = {"/home/user/application", "192.168.1.40",(char *) 0};

argv 数组的行为将在后面更明确地提到:

当程序作为 posix_spawn() 或 posix_spawnp() 调用的结果执行时,将按如下方式输入:

main(argc, argv, envp)
int argc;
char **argv, **envp;

其中 argc 是 argv 中的元素数("arg 计数"),argv 指向指向参数本身的字符指针数组。