シグナル、使えませんでしたか?シグナルを送るには kill() 関数だと思います。
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
親プロセスの fork() は子プロセスのプロセスIDを返します。そのまま kill() の引数にできるので、親は割と簡単です。注意すべきは子プロセスの方でしょう。
- まず、シグナルハンドラ関数を用意します。この関数はシグナルを受けた時に呼ばれるので、その時点でフラグ変数をセットするようにします。
- 無限ループは、単純に回っているのではなく、ループの最中にフラグ変数をチェックしながら回るようにします。
- シグナルを受けるには、予めシグナルハンドラ関数を「登録」しておく必要がありまして、そのための関数が signal() 関数です。関数ポインタを使うことになります。下の "handler" がそうです。
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
上記、kill()とsignal() の仕様はLinuxのmanで調べたものです。OSやコンパイラの環境が違えば何か違いがあるかもしれません。違いがわからなければコメントで質問してください。誰かが教えてくれるでしょう笑。
以上、私からのヒントです。Enjoy !