を実行することはできません:は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が、なぜ、実行されますか?
を実行することはできません:は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が、なぜ、実行されますか?
execl現在のプロセスを置き換えます。サブルーチンではありません。代わりに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 'してください。 –
しかし、forkはそれを2つのプロセスに分割します。これは並列に実行されますが、どちらも同じファイルハンドルに出力されます。これにより、見出しが出力の途中に表示されることが考えられます。 システムが不良であることに同意しますが、フォークがどのように優れているかわかりません。 – Mark
親プロセスと同じものを実行する代わりに、あるプロセス(通常は子プロセス)が 'execl'を呼び出します。したがって、出力の2つのコピーが得られません(' execl'の失敗を無視し、失敗したときは '_exit')。 –