📄 start.ec
字号:
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS,
"Open cursor error!", 1, 0);
dt_shm1();
return(-1);
}
del_st_space("sys_module", &p);
if (get_pid(p.prog_name, &pid) == 0) {
#ifdef zgx010427_modi
EXEC SQL CLOSE cur_5;
sprintf(buf,
"程序 %s 的进程已存在, 请先关闭系统再启动!",
p.prog_name);
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS, buf, 1, 0);
dt_shm1();
return(-1);
#else
/*
* 共享内存中虽为ACTIVE,但有可能进程实际上
* 已被kill -9 杀掉,因此,须查进程是否确实存在
*/
if (kill(pid, 0) == 0) {
EXEC SQL CLOSE cur_5;
sprintf(buf,
"程序 %s 的进程已存在, 请先关闭系统再启动!",
p.prog_name);
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS, buf, 1, 0);
dt_shm1();
return(-1);
} else {
/*
* 进程号所指的进程已不存在,修正
* 内存中模块运行状态
*/
upd_shm_pid( p.prog_name, pid, KILLED );
}
#endif
}
}
EXEC SQL CLOSE cur_5;
dt_shm1();
return(0);
}
/*
* 扫描尚未正常关闭的模块,若有则关闭之
*/
int kill_all_module(WINDOW *my_win)
{
char buf[90];
int pid;
PSTAT pp;
EXEC SQL DECLARE cur_kill CURSOR FOR
SELECT * FROM sys_module
WHERE start_mode not in ('0', '1')
ORDER BY module_id ;
if (SQLCODE) {
errcall(ERROR, "Declare cursor error!(cur_kill:%d)", SQLCODE);
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS, "Declare cursor error!",
1, 0);
return(-1);
}
EXEC SQL OPEN cur_kill;
if (SQLCODE) {
errcall(ERROR, "Open cursor error!(cur_kill:%d)", SQLCODE);
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS, "Open cursor error!",
1, 0);
return(-1);
}
while (1) {
EXEC SQL FETCH cur_kill INTO :p;
if (SQLCODE == 100) break;
if (SQLCODE) {
errcall(ERROR, "Fetch cursor error!(cur_kill:%d)", SQLCODE);
EXEC SQL CLOSE cur_kill;
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS,
"Open cursor error!", 1, 0);
return(-1);
}
del_st_space("sys_module", &p);
killproc(p.prog_name, SIGUSR1);
}
EXEC SQL CLOSE cur_kill;
return(0);
}
/*
* 关闭系统
*/
stopsys()
{
S_sys_param sy;
WINDOW *my_win, *subwin;
char filename[128], buf[256], tail[60], ch;
int pid, cnt;
PUBLIC pub;
PSTAT pp;
sprintf(filename, "/tmp/.stopsys.%d", getpid());
scr_dump(filename);
disp_below("关闭系统");
prompt_bottom(LINES-1, 0, 1, " ");
my_win = newwin(18,80,3,0);
mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
wrefresh(my_win);
fail = 0;
h_winprompt(my_win, MY_LINES, MY_ROWS, "是否要关闭系统?(Y/N)", 0, 0);
ch = getch();
if (ch != 'Y' && ch != 'y') {
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
}
h_winprompt(my_win, MY_LINES, MY_ROWS, "正在关闭系统, 请稍候 ...", 0, 0);
subwin = newwin(13, 80, 7, 0);
scrollok(subwin, TRUE);
line = 0;
select_sys_param(&sy);
sprintf(buf, "select count(*) from bank_base where \
bank_id = '%s' and host_id = '%s' and moni_enable = 'Y'",
sy.adm_bank_id, sy.adm_host_id);
if (query_count(buf)) {
sprintf(buf, "select count(*) from bank_base where \
bank_id = '%s' and host_id = '%s' and login_stat = 'I'",
sy.adm_bank_id, sy.adm_host_id);
if (query_count(buf) &&
(strcmp(sy.bank_id, sy.adm_bank_id) ||
strcmp(sy.host_id, sy.adm_host_id)) ) {
/* 向管辖行进行网络签退 */
if (!netlog_proc(1, &pub)) {
log_net(pub.Rcv_bank_id,pub.Rcv_host_id,"签退");
sprintf(tail, "%-30s", "成功!");
} else
sprintf(tail, "%-30s", "失败!");
strcpy(pub.Acq_bank_id, pub.Rcv_bank_id);
strcpy(pub.Acq_host_id, pub.Rcv_host_id);
new_repos(MSG_TRANS, &pub, sizeof(PUBLIC));
sprintf(buf, "进行 %-40s %s", "主机签退", tail);
h_winprompt(subwin, line, MY_ROWS, buf, 0, 0);
if (line < 12) line++;
}
}
$declare cur_6 cursor for
select * from sys_module
where start_mode != '0'
order by module_id;
if (SQLCODE) {
errcall(ERROR, "Declare cursor error!(stopsys:%d)", SQLCODE);
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS, "Declare cursor error!",
1, 0);
delwin(subwin);
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(-1);
}
$open cur_6;
if (SQLCODE) {
errcall(ERROR, "Open cursor error!(stopsys:%d)", SQLCODE);
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS, "Open cursor error!",
1, 0);
delwin(subwin);
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(-1);
}
while (1) {
$fetch cur_6 into :p;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
errcall(ERROR, "Fetch cursor error!(stopsys:%d)", SQLCODE);
$close cur_6;
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS,
"Fetch cursor error!", 1, 0);
delwin(subwin);
delwin(my_win);
scr_restore(filename);
unlink(filename);
dt_shm1();
return(-1);
}
del_st_space("sys_module", &p);
if (get_pid(p.prog_name, &pid) == 0) {
kill(pid, SIGUSR1);
}
}
$close cur_6;
sleep(5);
$open cur_6;
if (SQLCODE < 0) {
errcall(ERROR, "Open cursor error!(stopsys:%d)", SQLCODE);
$close cur_6;
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS,
"Open cursor error!", 1, 0);
delwin(subwin);
delwin(my_win);
dt_shm1();
scr_restore(filename);
unlink(filename);
return(-1);
}
while (1) {
$fetch cur_6 into :p;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
errcall(ERROR, "Fetch cursor error!(stopsys:%d)", SQLCODE);
$close cur_6;
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS,
"Fetch cursor error!", 1, 0);
delwin(subwin);
delwin(my_win);
dt_shm1();
scr_restore(filename);
unlink(filename);
return(-1);
}
del_st_space("sys_module", &p);
cnt = 0;
while (cnt < 5) {
if (get_pid(p.prog_name, &pid) == 0 &&
kill(pid, 0) == 0) {
kill(pid, SIGUSR1);
sleep(2);
cnt++;
} else break;
}
if (cnt >= 5) {
#ifdef zgx010520_added
errcall(ERROR, "%s[%d] close error, kill -9 now",
p.prog_name, pid);
kill(pid, 9);
sleep(2);
if (kill(pid, 0) && errno == ESRCH)
cnt = 0;
#else
/*
* 在多次为关闭成功后,
* 尝试用ps -e命令查找的方式,kill之
*/
killproc(p.prog_name, SIGUSR1);
errcall(ERROR, "%s[%d] close error, kill -9 now",
p.prog_name, pid);
sleep(2);
kill(pid, SIGKILL);
killproc(p.prog_name, SIGKILL);
sleep(2);
if (kill(pid, 0) && errno == ESRCH)
cnt = 0;
#endif
}
if (cnt < 5) {
sprintf(buf, "关闭 %-40s 成功!%25s", p.prog_desc,
" ");
h_winprompt(subwin, line, MY_ROWS, buf, 0, 0);
if (line < 12) line++;
} else {
sprintf(buf, "关闭 %-40s 失败!%25s", p.prog_desc,
" ");
h_winprompt(subwin, line, MY_ROWS, buf, 0, 0);
if (line < 12) line++;
fail++;
}
nap(400);
}
$close cur_6;
dt_shm1();
if (!no_init()) {
del_bank_stat_moni();
if (rmsg_nonb(RESP_MSG) < 0) {
errcall(ERROR, "rmsg_nonb RESP_MSG error");
fail++;
}
if (rmsg_nonb(REQ_MSG) < 0) {
errcall(ERROR, "rmsg_nonb REQ_MSG error");
fail++;
}
#ifdef zgx010717_added
#else
if (rmsg_nonb(TO_SAFE) < 0) {
errcall(ERROR, "rmsg_nonb TO_SAFE error");
fail++;
}
if (rmsg_nonb(FROM_SAFE) < 0) {
errcall(ERROR, "rmsg_nonb FROM_SAFE error");
fail++;
}
#endif
if (rmsg(MONITOR) < 0) {
errcall(ERROR, "rmsg MONITOR error");
fail++;
}
if (rshm1() < 0) {
errcall(ERROR, "rm_shm error");
fail++;
}
}
if (fail)
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS, "关闭系统失败!", 1, 0);
else
h_winprompt(my_win, MY_LINES+MY_PAGE, MY_ROWS, "关闭系统成功!", 1, 0);
delwin(subwin);
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
}
#ifdef zgx020425_del
/* Move to mytools/errcall.c */
/*---------------------------------------------------
判系统是否已初始化
return: 1 --- NOT INIT
0 --- INIT SUCC
-----------------------------------------------------*/
no_init()
{
key_t key;
int shid;
if ((key = getipckey(SHMFILE, SHMID1)) < 0) {
errcall(ERROR, "SHMFILE err! getipckey err!");
return(1);
}
if ((shid = shmget(key, sizeof(SHM1), IPCGET)) < 0) {
return(1);
}
return(0);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -