我正在尝试使用execv系统调用从C ++触发进程。它完美无缺,直到我尝试通过调用非交互式shell启动我的进程之前获取用户环境。
我基本上改变的是我的命令(对于这个例子,我使用了一个转储argv []数组的test.bin文件)现在以前缀为:/ bin / sh -l -c“exec ./testbin testargv1 testargv2"
当我从另一个shell启动命令时,我得到了这个:
0:./ testbin 1:./ testargv1 2:./ testargv2
然而,当我通过execve在c ++程序中启动它时,我得到:
0:/ bin / sh 1:-l 2:-c 3:exec ./testbin testargv1 testargv2
从c中,我只是做以下事情:
char* exe = "/bin/sh";
char** params = { "/bin/sh","-l","-c","exec ./testbin testargv1 testargv2",0 };
execv(exe,params);
就像从execve启动时一样,shell在分叉之前不会重新安排argv。
有人有任何提示吗?
答案 0 :(得分:0)
您确定要向我们展示正确的代码吗?对我来说,看起来你正在做这样的事情:
char* exe = "./testbin";
char** params = { "/bin/sh","-l","-c","exec ./testbin testargv1 testargv2",0 };
execv(exe,params);
通常,您会删除exe
变量,并像这样调用execv
:
execv(params[0], params);