2014-10-16 72 views
0

我試圖從C++使用execv系統調用來啓動一個進程。直到我試圖通過調用一個非交互式shell來啓動我的進程之前獲取用戶環境,它才能正常工作。使用execv和shell的問題exec

我基本上改變的是,我的命令(對於這個例子,我使用了一個轉儲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

你確定你告訴我們正確的代碼嗎?對我來說,它看起來像你正在做的事情是這樣的:

char* exe = "./testbin"; 
char** params = { "/bin/sh","-l","-c","exec ./testbin testargv1 testargv2",0 }; 
execv(exe,params); 

通常,您將放棄exe變量,並調用execv這樣的:

execv(params[0], params); 
+0

不正是這一點,但這個問題的確是我的非僞 - 傳遞錯誤的可執行文件名的代碼 – 2014-10-16 21:12:36