使用execv和shell exec的问题

时间:2014-10-16 12:09:35

标签: c++ linux macos shell

我正在尝试使用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。

有人有任何提示吗?

1 个答案:

答案 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);