2011-10-09 129 views
0

我正在使用C++並嘗試在外部進程中運行shell命令。這裏是我到目前爲止的代碼:使用exec/fork運行外部進程

pid_t pid; 
pid = fork(); 
if(pid == 0){ 
    execv(args[0],args); 
} else { 
    wait(); 
} 

我的第一個問題是,我需要從傳遞到exec shell命令的輸出,我不知道如何獲取。在運行上面的代碼之後,主程序也自我複製,我不知道爲什麼。

+0

你還應該處理'pid == -1'的情況。即使只是打印出錯信息並退出。 – derobert

+0

你應該有'exit(1);'並且可能在'execv()'之後有一個打印的消息。你的'重複自己'可能是因爲'argv [0]'是'「ls」'而不是''/ bin/ls「而''execv()'不使用PATH進行搜索。因此,'execv()'失敗,並且孩子繼續或多或少地做父母所做的事情。 –

回答

1

args[0]大概是正在運行的程序的名稱,所以它會分叉然後自己執行。

爲了收集輸出,您需要安排顯式傳遞它。 Unix pipe()調用通常用於此目的。

+0

args [0]不是正在運行的程序的名稱。在我的示例程序中,它是'ls' – Aaron