使用posix_spawn启动进程

时间:2013-10-23 16:04:08

标签: c++ linux

我使用以下代码在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参数中的错误是什么?

1 个答案:

答案 0 :(得分:10)

来自posix_spawn手册页:

  

参数argv是一个指向以null结尾的字符指针数组的指针,这些字符指针指向以null结尾的字符串。这些字符串构造了可供新进程使用的参数列表。至少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指向参数本身的字符指针数组。