我使用以下代码在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参数中的错误是什么?
答案 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指向参数本身的字符指针数组。