-
Notifications
You must be signed in to change notification settings - Fork 36
/
msignal.c
125 lines (109 loc) · 2.95 KB
/
msignal.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include "version.h"
#include <signal.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include "buf.h"
#include "net.h"
#include "char.h"
#include "item.h"
#include "object.h"
#include "configfile.h"
#include "lssproto_serv.h"
#include "saacproto_cli.h"
#include "log.h"
#include "petmail.h"
/*------------------------------------------------------------
* lsprotocol 及伐□平件弘 毛荸 允月楮醒毛裟少[
* 娄醒}忒曰袄
* 卅仄
------------------------------------------------------------*/
static void endlsprotocol( void )
{
lssproto_CleanupServer();
saacproto_CleanupClient();
}
/*------------------------------------------------------------
* 允屯化及忡绣仄卅仃木壬卅日卅中犯□正毛母件皿允月楮醒
* 公木冗木及乒斥亘□伙及楮醒毛裟少及心[
* 娄醒}忒曰袄
* 卅仄
------------------------------------------------------------*/
static void allDataDump( void )
{
closeAllLogFile();
#ifndef _SIMPLIFY_ITEMSTRING
storeObjects( getStoredir() );
storePetmail();
#endif
storeCharaData();
}
/*------------------------------------------------------------
* 皿夫弘仿丞及蔽 质 及凶户卞裟太请今木月[
* 娄醒}忒曰袄
* 卅仄
------------------------------------------------------------*/
void shutdownProgram( void )
{
close( acfd );
close( bindedfd );
endlsprotocol();
endConnect();
memEnd();
}
char *DebugFunctionName = NULL;
//char *DebugFunctionName_CHAR = NULL;
//char *DebugFunctionName_ITEM = NULL;
int DebugPoint = 0;
void sigshutdown( int number )
{
print( "Received signal : %d\n" , number );
if( number == 0 )print( "\ngmsv normal down\n" );
print( "\nDebugPoint (%d)\n", DebugPoint );
print( "\nLastFunc (%s)\n", DebugFunctionName );
remove( "gmsvlog.err2");
rename( "gmsvlog.err1", "gmsvlog.err2" );
rename( "gmsvlog.err", "gmsvlog.err1" );
rename( "gmsvlog", "gmsvlog.err" );
#if USE_MTIO
{
void MTIO_join(void);
MTIO_join();
}
#endif
allDataDump();
signal( SIGINT , SIG_IGN );
signal( SIGQUIT, SIG_IGN );
signal( SIGKILL, SIG_IGN );
signal( SIGSEGV, SIG_IGN );
signal( SIGPIPE, SIG_IGN );
signal( SIGTERM, SIG_IGN );
signal( SIGALRM, SIG_IGN );
shutdownProgram();
exit(number);
}
extern jztimeout;
void jztime_out( int number )
{
print("超时机制生效");
jztimeout=TRUE;
}
void signalset( void )
{
// CoolFish: Test Signal 2001/10/26
print("\nCoolFish Get Signal..\n");
print("SIGINT:%d\n", SIGINT);
print("SIGQUIT:%d\n", SIGQUIT);
print("SIGKILL:%d\n", SIGKILL);
print("SIGSEGV:%d\n", SIGSEGV);
print("SIGPIPE:%d\n", SIGPIPE);
print("SIGTERM:%d\n", SIGTERM);
print("SIGALRM:%d\n", SIGALRM);
signal( SIGINT , sigshutdown ); //终端中断符
signal( SIGQUIT, sigshutdown ); //终端退出符
signal( SIGKILL, sigshutdown ); //终止
signal( SIGSEGV, sigshutdown ); //无效储存访问
signal( SIGPIPE, SIG_IGN ); //写至无读进程的管道
signal( SIGTERM, sigshutdown ); //终止
signal( SIGALRM, jztime_out ); //超时
}