シングルスレッドのコードでシグナルハンドラ中でforkし、子プロセスが非同期シグナルセーフな関数を呼んでデッドロックする実例です。 非同期シグナルセーフな関数として a() を用意しました。この関数は入り口でmutexをロック、中で10秒寝て、mutexをアンロックして戻ります。 #include <sys/types.h> #include <time.h> #include <unistd.h> #include <signal.h> #include <pthread.h> #include <stdio.h> void a(void) { static pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; const struct timespec t = {10, 0}; printf("enter a(), pid = %d\n", ge