|
ÃÑ ÆäÀÌÁö ¼ö : 3178 ![]()
|
ÇöÀçÀ§Ä¡ : SIGTERM ´Ù·ç±â
¸ñ Àû
Code
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
class tClass1 {
private :
char* buf;
public :
void method(void) {
buf = new char[100];
while (1) {
printf("This is thread 1\n");
sleep(1);
}
}
~tClass1(void) {
delete[] buf;
printf("Thread 1 exit\n");
}
};
class tClass2 {
private :
char* buf;
public :
void method(void) {
buf = new char[100];
while (1) {
printf("This is thread 2\n");
sleep(1);
}
}
~tClass2(void) {
delete[] buf;
printf("Thread 2 exit\n");
}
};
tClass1* pClass1;
tClass2* pClass2;
pthread_t pt1, pt2;
void* tFunc1(void* arg) {
pClass1->method();
}
void* tFunc2(void* arg) {
pClass2->method();
}
void hanSigInt(int sig) {
printf("Got signal %d\n", sig);
sleep(3);
printf("Leave handle of signal\n");
}
void hanSigTerm(int sig) {
printf("Got signal %d\n", sig);
pthread_cancel(pt1);
pthread_cancel(pt2);
delete pClass1;
delete pClass2;
sleep(3);
pthread_join(pt1, NULL);
pthread_join(pt2, NULL);
printf("Leave this program\n");
exit(EXIT_SUCCESS);
}
int main(void) {
daemon(1, 1);
pClass1 = new tClass1;
pClass2 = new tClass2;
signal(SIGINT, hanSigInt);
signal(SIGTERM, hanSigTerm);
pthread_create(&pt1, NULL, tFunc1, NULL);
pthread_create(&pt2, NULL, tFunc2, NULL);
while (1) {
printf("This is main\n");
sleep(1);
}
exit(EXIT_SUCCESS);
}
|
|