2017-04-13 6 views
0

fork()を使用して多数のプロセスを作成するプログラムを作成していますが、同じプログラムに対してexec関数を呼び出しています(これは教授が要求しています)。Cメインプロセス用のLinuxシグナルハンドラ

CTRL + C(SIGINT)に反応して、離席するかどうかをユーザーに尋ねる必要があります。問題は、シグナルハンドラがすべての子プロセスにも実装されているため、シグナルが送信されるときに、ユーザーはプロセスの数と同じ時間に応答する必要があるということです。

私はCTRL + Cで1回だけユーザーに尋ねたいと思う。

私はどのようなソリューションを実装できますか?

+0

フォーク最初に、後で信号処理を設定しますか?あるいは、子供たちの 'exec'の前に、シグナルハンドラをデフォルトに設定しますか? –

+0

fork()によって生成されたプロセスもfork()されるので、(ほとんど)すべてのプロセスにハンドラがインストールされます。 –

+0

子プロセスの最初のセットは、それらが子プロセスであることを認識します。したがって、最初の「メイン」プロセスとは異なるパスを継続します。彼らがそうでなければ、あなたのデザインに欠陥があると言えます。 –

答えて

0

fork()に電話すると、親プロセスは子のPIDを返します。親がSIGINTシグナルを受け取ったときに、killシステムコール経由でSIGTERMまたはSIGKILLシグナルを子プロセスに送ることができます。

+0

問題は子供に信号を送る方法ではありません。子供たちがすでに 'SIGINT 'を受け取っていて、OPが望んでいるのとは違ってそれを扱っているということです。 –

関連する問題