2017-02-07 10 views
1

私はexecvを使ってコマンドを実行しようとしています。このプログラムを実行した後、私は "Going to call execv!"というステートメントを見ることができます。標準出力に印刷されます。execvを呼び出した後の奇妙な動作

私はまた、プログラム「漏れ」からのプリントを見ることができます。実際には、ifやelseブロック、つまり「execv failed!error:」や「valgrindが正常に実行された」のいずれにも印刷文が表示されないことを除いて、すべてが正常に動作しています。が出力に印刷されています。

私はexecvについていくつかの明白な点がありませんか?

+5

[man page](https://linux.die.net/man/3/execv)を読むことで、「exec()ファミリの機能*​​が**現在のプロセスイメージを置き換えます」と、 exec()関数は、エラーが発生した場合にのみ返します。 – kaylum

+0

'execv'がプログラムの実行に成功した場合、呼び出し側プロセスは新しいプログラムによって「置き換えられる」ようです。だから、 "プログラムを呼び出して結果を得る"ではなく、そのために 'system'関数を使います。 – yeputons

+0

[C execv()関数が子プロセスを終了させますか?](http://stackoverflow.com/questions/5172257/does-the-c-execv-function-terminate-the-child-proccess) –

答えて

4

valgrindの出力が得られたら、明らかにexecveが成功しました。 execveが成功すると、現在のプロセスイメージが開始されたイメージに置き換えられ、返されません。 execveが返された場合、失敗しました。

関連する問題