このプログラムは、
親は、子が戻るのを無期限に待つだけです (ヒント、waitpid)。b. 子供は 2 つのシグナル ハンドラー (ヒント、シグナル) を設定し、5 分間スリープ状態になります。私。最初のシグナル ハンドラーは USR1 シグナルをリッスンし、それを受信すると次の処理を行います。 1. スレッドを作成します (ヒント、pthread_create)。を。基本的に、スレッドが行う必要があるのは、「こんにちは」と 60 秒間スリープすることだけです。ii. 2 番目のシグナル ハンドラーは USR2 シグナルをリッスンし、それを受信すると次の処理を行います。 1. スレッドを破棄します (ヒント、pthread_destroy)。
私のコードは正常にコンパイルされます。実行すると、何も起こりません。テストとしてそこに置いた最初のprintfでさえありません。私はそれを1時間じっと見つめていましたが、エラーはありません。なぜこれが実行されないのですか?
編集:これは現在実行されていますが、チャーリーに感謝しますが、スレッドを作成すると、「[スレッド] 1 m [スレッド] 1分間スリープ」が出力されて終了し、2番目のシグナルを待つことはありません
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
pthread_t thread;
void* temp()
{
printf("[thread] hello professor\n");
printf("[thread] sleeping for 1 minute\n");
sleep(60);
}
void handle_USR1(int x)
{
int s;
printf("[signal] creating the thread\n");
s = pthread_create(&thread, NULL, &temp, NULL);
}
void handle_USR2(int x)
{
int s;
printf("[signal] destroying the thread\n");
s = pthread_cancel(thread);
}
int main(void)
{
int status = 0;
if(fork() != 0)
{
printf("[parent] waiting.....\n");
waitpid(-1, &status, 0);
}
else
{
printf("[child] to create the thread: kill -USR1 %d\n", getpid());
printf("[child] to end the thread: kill -USR2 %d\n", getpid());
printf("[child] setting up signal handlers\n");
signal(SIGUSR1, handle_USR1);
signal(SIGUSR2, handle_USR2);
printf("[child] waiting for signals\n");
sleep(300);
}
return (0);
}