如果我試圖執行這些命令:不能運行兩次EXECL
int main(int argc, char* argv[])
{
execl("/bin/echo","echo","list ","of", "files:\n",NULL);
execl("/bin/ls","ls","-al",NULL);
return 0;
}
只有第一個被執行,爲什麼呢?
如果我試圖執行這些命令:不能運行兩次EXECL
int main(int argc, char* argv[])
{
execl("/bin/echo","echo","list ","of", "files:\n",NULL);
execl("/bin/ls","ls","-al",NULL);
return 0;
}
只有第一個被執行,爲什麼呢?
execl REPLACES當前進程 - 它不是子例程。您可以嘗試使用system()
。
因爲只要您運行exec*()
您的應用程序將停止現有的。如果你想運行多個外部過程,那麼你需要fork()
。
您需要先分叉。
嘗試運行
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;
}
'system'是壞的。在'execl'之前只是'fork'。 – 2012-03-12 21:06:59
但是fork會將它分成兩個進程,它們將並行運行,但都會將輸出顯示到相同的文件句柄。這可能會導致標題顯示在輸出中間。 我同意系統是壞的,但我沒有看到叉是如何更好。 – Mark 2012-03-15 22:01:21
一個進程(通常是子進程)調用'execl'而不是做與父進程相同的事情,所以不行,你不會得到2個輸出副本(除非你忽略了'execl'的失敗並且不立即'_exit'失敗時)。 – 2012-03-15 23:59:15