2012-03-12 109 views
-1

如果我試圖執行這些命令:不能運行兩次EXECL

int main(int argc, char* argv[]) 
{ 
    execl("/bin/echo","echo","list ","of", "files:\n",NULL); 
    execl("/bin/ls","ls","-al",NULL); 
    return 0; 
} 

只有第一個被執行,爲什麼呢?

回答

4

execl REPLACES當前進程 - 它不是子例程。您可以嘗試使用system()

+0

'system'是壞的。在'execl'之前只是'fork'。 – 2012-03-12 21:06:59

+0

但是fork會將它分成兩個進程,它們將並行運行,但都會將輸出顯示到相同的文件句柄。這可能會導致標題顯示在輸出中間。 我同意系統是壞的,但我沒有看到叉是如何更好。 – Mark 2012-03-15 22:01:21

+0

一個進程(通常是子進程)調用'execl'而不是做與父進程相同的事情,所以不行,你不會得到2個輸出副本(除非你忽略了'execl'的失敗並且不立即'_exit'失敗時)。 – 2012-03-15 23:59:15

4

因爲只要您運行exec*()您的應用程序將停止現有的。如果你想運行多個外部過程,那麼你需要fork()

1

您需要先分叉。

嘗試運行

int main(int argc, char* argv[]) 
{ 
    if(vfork() == 0) 
     execl("/bin/echo","echo","list ","of", "files:\n",NULL); 
    if(vfork() == 0) 
     execl("/bin/ls","ls","-al",NULL); 
    return 0; 
}