2011-10-09 86 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