2012-03-12 7 views
-1

を実行することはできません:は2回EXECL

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

をのみ、最初の1が、なぜ、実行されますか?

答えて

4

execl現在のプロセスを置き換えます。サブルーチンではありません。代わりにsystem()を使用してみてください。

+0

'system'が悪いを実行してみてください。 'execl'の前に' fork 'してください。 –

+0

しかし、forkはそれを2つのプロセスに分割します。これは並列に実行されますが、どちらも同じファイルハンドルに出力されます。これにより、見出しが出力の途中に表示されることが考えられます。 システムが不良であることに同意しますが、フォークがどのように優れているかわかりません。 – Mark

+0

親プロセスと同じものを実行する代わりに、あるプロセス(通常は子プロセス)が 'execl'を呼び出します。したがって、出力の2つのコピーが得られません(' execl'の失敗を無視し、失敗したときは '_exit')。 –

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; 
}