#include <signal.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <pthread.h>
pthread_mutex_t mutex;
int shareValue=0;
void signalHandler(int sigID)
{
printf("signal is coming!\n");
return 0;
}
void childOver(int sigID)
{
int pid=wait(NULL);
shareValue=10;
// pthread_mutex_lock(&mutex);
printf("####################child process over!signal ID %d\n",sigID);
// pthread_mutex_unlock(&mutex);
return 0;
}
void *threadfun(void *arg)
{
printf("$$$$$$$$$$$$$$$$$$Thread start>>>sleep 5>>>>>>>>!thread id:%ld\n",pthread_self());
sleep(5);
printf("$$$$$$$$$$$$$$$$child Thread errno :%d,%s,thraed id:%ld\n",errno,strerror(errno),getpid());
pthread_mutex_lock(&mutex);
//sleep(10);
printf("lock value for add:%d,and sleep 5 seconds!\n",shareValue++);
sleep(5);
pthread_mutex_unlock(&mutex);
pthread_exit(0);
}
int main()
{
pthread_mutexattr_t mutexAttr;
pthread_mutexattr_init(&mutexAttr);
pthread_mutexattr_setpshared(&mutexAttr,PTHREAD_PROCESS_SHARED);
pthread_mutex_init(&mutex,&mutexAttr);
signal(SIGWINCH,signalHandler);
signal(SIGCHLD,childOver);
int i=0;
pthread_t tid;
pthread_create(&tid,NULL,threadfun,NULL);
sleep(4);
//for(;i<10;i++)
{
if(fork()==0)
{
pthread_t ctid;
printf("**************create child process ID %d\n",getpid());
pthread_create(&ctid,NULL,threadfun,NULL);
i=pthread_join(ctid,NULL);
printf("**************child process exit!*******status:%d:%s:pthread_join return value:%d*******\n",errno,strerror(errno),i);
exit(0);
}
}
i=sleep(15);
printf("&&&&&&&&&&sleep interrupt happen,error reason :%s,error code :%d\n",strerror(i),i);
printf("&&&&&&&&&&&&&ERRON NO:%d,error reason :%s\n",errno,strerror(errno));
printf("&&&&&&&&&&&&&&&&process ID %d!\n",getpid());
// #include "common.hisleep(10);
printf("sleep return status :%d\n",sleep(10),errno);
// while(1){};
pthread_join(tid,NULL);
pthread_mutexattr_destroy(&mutexAttr);
pthread_mutex_destroy(&mutex);
exit(0);
return 0;
}
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <pthread.h>
pthread_mutex_t mutex;
int shareValue=0;
void signalHandler(int sigID)
{
printf("signal is coming!\n");
return 0;
}
void childOver(int sigID)
{
int pid=wait(NULL);
shareValue=10;
// pthread_mutex_lock(&mutex);
printf("####################child process over!signal ID %d\n",sigID);
// pthread_mutex_unlock(&mutex);
return 0;
}
void *threadfun(void *arg)
{
printf("$$$$$$$$$$$$$$$$$$Thread start>>>sleep 5>>>>>>>>!thread id:%ld\n",pthread_self());
sleep(5);
printf("$$$$$$$$$$$$$$$$child Thread errno :%d,%s,thraed id:%ld\n",errno,strerror(errno),getpid());
pthread_mutex_lock(&mutex);
//sleep(10);
printf("lock value for add:%d,and sleep 5 seconds!\n",shareValue++);
sleep(5);
pthread_mutex_unlock(&mutex);
pthread_exit(0);
}
int main()
{
pthread_mutexattr_t mutexAttr;
pthread_mutexattr_init(&mutexAttr);
pthread_mutexattr_setpshared(&mutexAttr,PTHREAD_PROCESS_SHARED);
pthread_mutex_init(&mutex,&mutexAttr);
signal(SIGWINCH,signalHandler);
signal(SIGCHLD,childOver);
int i=0;
pthread_t tid;
pthread_create(&tid,NULL,threadfun,NULL);
sleep(4);
//for(;i<10;i++)
{
if(fork()==0)
{
pthread_t ctid;
printf("**************create child process ID %d\n",getpid());
pthread_create(&ctid,NULL,threadfun,NULL);
i=pthread_join(ctid,NULL);
printf("**************child process exit!*******status:%d:%s:pthread_join return value:%d*******\n",errno,strerror(errno),i);
exit(0);
}
}
i=sleep(15);
printf("&&&&&&&&&&sleep interrupt happen,error reason :%s,error code :%d\n",strerror(i),i);
printf("&&&&&&&&&&&&&ERRON NO:%d,error reason :%s\n",errno,strerror(errno));
printf("&&&&&&&&&&&&&&&&process ID %d!\n",getpid());
// #include "common.hisleep(10);
printf("sleep return status :%d\n",sleep(10),errno);
// while(1){};
pthread_join(tid,NULL);
pthread_mutexattr_destroy(&mutexAttr);
pthread_mutex_destroy(&mutex);
exit(0);
return 0;
}