2016-05-23 6 views
3

execファミリーファンクションコールは、最終的にシステムコールであるexecve()を呼び出し、残りはライブラリファンクションです。したがって、通常、execve()に適用される意味は、他のexec*()関数にも当てはまります。Cでのexecファミリー関数

execve()の実行中に、すべてのシグナルが成功するまでブロックされているか、execに対応するシグナルをpidに渡す方法があるかどうかを知りたいですか? (私はそれが成功して返されないことを知っており、呼び出し関数のさらなる実行は起こらない)

+2

あなたが何を求めているのかわからない。あなたが尋ねていることを説明するために擬似コードを提供できますか? – csl

+0

@csl私の質問は簡単で、まっすぐですが、execve(またはexec関数)は終了するまですべてのシグナルをブロックしますか? – theartist33

+0

http://unix.stackexchange.com/questions/16455/interrupt-of-system-calls-when-a-signal-is-caughtを参照してください – csl

答えて

4

私はあなたの質問を正しく持っているか分からないので、間違っている場合は私を修正すること自由に感じる。

しかし、基本的には、システムコールはプロセスの観点からは「アトミック」と考えることができます。したがって、execve()システムコールが開始されると、カーネルだけが手を加えて、新しいコマンドを実行するかエラーコードで失敗するか、またはSIGKILLシグナルを発生させるまでプロセスを解放しません(SIGKILLはブロックされない唯一のシグナルです)。

しかし、execve()が新しいプロセスを生成して(そしてカーネルから返されると)、どのシグナルでも完全に中断できます。

+0

私の質問は単純明快です、execve(または任意のexec関数)完了するまですべての信号をブロックしますか? – theartist33

+0

はい。それはカーネル空間(ユーザ空間ではない)にあるからです。 – perror

+0

どのように終了する/終了する(停止)他のコンテキストからのプロセスIDを殺すことなくexec関数を終了する? – theartist33

関連する問題