使用posix_spawn开始一个进程

我正在使用以下代码在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是一个指向空终止字符串的以空字符结尾的字符指针数组的指针。 这些字符串构造参数列表,使其可用于新进程。 数组中至少必须存在argv [0],并且应包含正在生成的程序的文件名 ,例如路径或文件参数的最后一个组件。

发生的事情是在启动的过程中, 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 count”),argv指向参数本身的字符指针数组。