親から N 個の子を作成したい。私はすべての子供たちが同時に(機能 - 時間を測定するために)開始することを望んでいます。そのため、関数をシグナル ハンドラーに配置し、親がすべての子の作成 (フォーク) を完了すると、(kill(children_id) を使用して) すべての子にシグナルを送信して開始します。以下にコードを示しますが、期待どおりに動作しません。具体的には、すべての子をフォークしましたが、関数「measure_time」をまったく実行しませんでした。この関数は実行時間を記録して出力するだけのものです。私が何か間違ったことをしている場合、誰かが私に知らせてもらえますか?
int n_task = 4;
for (i = 0; i < n_task; i++){
pid = fork();
if (pid < 0){
printf("cannot fork!\n");
} else
if (pid == 0){ //child
printf("printed from child [%d]\n", getpid());
signal(SIGUSR1, measure_time); //measure_time is a function
exit(0);
} else {
pid_array[i] = pid;
}
}
//This code is executed from parent only
for (int i = 0; i < n_task; i++)
{
kill(pid_array[i], SIGUSR1);
}