【发布时间】:2014-10-16 12:09:35
【问题描述】:
我正在尝试使用 execv 系统调用从 C++ 触发一个进程。在我通过调用非交互式 shell 启动进程之前尝试获取用户环境之前,它工作得很好。
我基本上改变的是我的命令(对于这个例子,我使用了一个转储 argv[] 数组的 test.bin 文件)现在前缀为: /bin/sh -l -c "exec ./testbin testargv1 testargv2"
当我从另一个 shell 启动命令时,我得到了这个:
0: ./testbin 1:./testargv1 2:./testargv2
同时,当我通过 c++ 程序中的 execve 启动它时,我得到:
0: /bin/sh 1:-l 2:-c 3:执行./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。
有人有什么提示吗?
【问题讨论】: