📄 active.ec
字号:
di[num++] = i;
}
}
if (num == 0) {
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, "无活动进程!", 1, 0);
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
}
pos = 0;
while (1) {
line = MY_LINES;
for (i = line; i < 17; i++) clear_wline(my_win, i);
for (i = 0; ((pos + i) < num) && (i < 14); i++) {
sprintf(buf, "%x %-15.15s\t\t%s", i, head[pos+i].exec_name, head[pos + i].program_name);
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
}
line = (pos + i) < num;
sprintf(buf, "以上为活动进程, 请选择其一暂停%s%s%s%s",
(pos || line) ? " (" : "", pos ? " PgUp 上页" : "",
line ? " PgDn 下页" : "", (pos || line) ? " )" : "");
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, buf, 0, 0);
wrefresh(my_win);
do {
switch (line = getkey(my_win)) {
case PGUP:
if (pos) {
pos -= 14;
line = 0;
}
break;
case PGDN:
if ((pos + i) < num) {
pos += 14;
line = 0;
}
break;
case CTRL_L:
wrefresh(curscr);
break;
case ESCAPE:
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
default:
if (0x30 <= line && line <= 0x39)
line -= 0x30;
else
if ('a' <= line && line <= 'f')
line += 10 - 'a';
else
if ('A' <= line && line <= 'F')
line += 10 - 'A';
else {
line = 1;
break;
}
if (line >= i) break;
line += pos;
if (di[line] == -1) break;
sprintf(buf, "暂停 %s(%s) ...", head[line].program_name, head[line].exec_name);
clear_wline(my_win, MY_LINES+PAGE);
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, buf,
0, 0);
sleep(2);
pos = di[line];
#ifdef zgx010528_modi
sprintf(ppp.prog_name, "%s%%",
sh1->pst[pos].name);
$select * into :ppp from sys_module
where prog_name like :ppp.prog_name;
#else
sprintf(ppp.prog_name, "%s",
sh1->pst[pos].name);
$select * into :ppp from sys_module
where prog_name = :ppp.prog_name;
#endif
if (SQLCODE) {
errcall(ERROR,
"Select program_mode error![%s][%d]",
sh1->pst[pos].name, SQLCODE);
clear_wline(my_win, MY_LINES+PAGE);
sprintf(buf, "%s(%s) 暂停失败! 任意键继续...",
head[line].program_name, head[line].exec_name);
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS,
buf, 1, 0);
#ifdef zgx010520_modi
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
#else
goto loop;
#endif
}
if (ppp.start_mode[0] != '4') {
kill(sh1->pst[pos].pid, SIGUSR1);
sh1->pst[pos].pause = KILLED;
} else
sh1->pst[pos].pause = PAUSE;
clear_wline(my_win, MY_LINES+PAGE);
sprintf(buf, "%s(%s) 暂停成功! 任意键继续...", head[line].program_name, head[line].exec_name);
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, buf,
1, 0);
#ifdef zgx010520_modi /* 多次选择 */
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
#else
goto loop;
#endif
}
} while (line);
}
}
/*
* 查询系统所运行的模块状态
*/
sysstate()
{
char filename[128], buf[80], tail[30];
WINDOW *my_win;
PSTAT pp;
int flag;
sprintf(filename, "/tmp/.sysstate.%d", getpid());
scr_dump(filename);
disp_below("系统状态");
clear_wline(stdscr, LINES-1);
h_prompt(LINES-1, 1, " < ESC 退出 > ", 0, 0);
h_prompt(LINES-1, 1, "系统状态", 0, 0);
my_win = newwin(18, 80, 3, 0);
mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
wrefresh(my_win);
if (no_init()) {
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, "系统未启动!", 1, 0);
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
}
$declare cur_5 cursor for
select * from sys_module
where start_mode not in ('0','3')
order by module_id;
if (SQLCODE) {
errcall(ERROR, "Declare cursor error!(cur_5:%d)", SQLCODE);
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, "Declare cursor error!",
1, 0);
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(-1);
}
sprintf(buf, "模块描述 程序名 最后执行时间 执行次数 状态 进程号");
CreateList(20, 74, 4, 3, buf);
$open cur_5;
if (SQLCODE) {
errcall(ERROR, "Open cursor error!(cur_5:%d)", SQLCODE);
FreeList();
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, "Open cursor error!",
1, 0);
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(-1);
}
while (1) {
$fetch cur_5 into :ppp;
if (SQLCODE == 100) break;
if (SQLCODE < 0) {
errcall(ERROR, "Fetch cursor error!(cur_5:%d)", SQLCODE);
$close cur_5;
FreeList();
h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS,
"Fetch cursor error!", 1, 0);
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(-1);
}
del_st_space("sys_module", &ppp);
strcpy(pp.name, ppp.prog_name);
if (sel_shm_pid(&pp) < 0) {
if (ppp.start_mode[0] != '1') {
sprintf(buf, "%-20.20s%-12.12s%22s %-6s%6s",
ppp.prog_desc, ppp.prog_name,
" ", "异常", " ");
AddListItem(buf, 1);
}
continue;
}
flag = 0;
switch (pp.pause) {
case PAUSE:
strcpy(tail, "暂停");
break;
case ACTIVE:
case SETTIME:
if (get_pid(pp.name, &pp.pid) < 0) {
upd_shm_pid(pp.name, pp.pid, 'O');
strcpy(tail, "异常");
flag = 1;
break;
}
strcpy(tail, "活动");
break;
case KILLED:
strcpy(tail, "关闭");
break;
default:
strcpy(tail, "异常");
flag = 1;
break;
}
sprintf(buf, "%-20.20s%-12.12s%-14s%8d %-6s%6d",
ppp.prog_desc, ppp.prog_name, pp.time,
pp.times, tail, pp.pid);
AddListItem(buf, flag);
}
$close cur_5;
#if 0
sprintf(buf, "%s", "调试开关");
if (debug_ok())
strcat(buf, " 活动");
else
strcat(buf, " 关闭");
line++;
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
#endif
clear_wline(stdscr, LINES-1);
h_wpromptr(stdscr, LINES-1, "上移: Home PgUp ↑ 下移: End PgDn ↓ 返回: ESC", 0, 0);
DispList(0);
FreeList();
h_prompt(LINES-1, 1, " < ESC 退出 > ", 0, 0);
h_prompt(LINES-1, 1, "系统状态", 0, 0);
#ifndef zgx010427
disp_msg_state(my_win);
#endif
delwin(my_win);
scr_restore(filename);
unlink(filename);
return(0);
}
disp_msg_state(WINDOW *my_win)
{
struct msg_s_stat m_s_s;
char buf[80], str[80], ch;
int line;
line = MY_LINES;
mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
sprintf(buf, "%s %s %s %s %s %s %s", "系统消息名", "消息个数",
"发送进程", "发送时间", "接收进程", "接收时间", "创建时间");
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
h_winprompt(my_win, line++, MY_ROWS, "----------------------------------------------------------------", 0, 0);
disp_msg_stat(MONITOR, str);
sprintf(buf, "%-10s %s", "MONITOR", str);
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
h_winprompt(my_win, line++, MY_ROWS, "----------------------------------------------------------------", 0, 0);
line++;
sprintf(buf, "%s %s %s", "用户消息名", "消息个数", "等待接收进程数");
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
h_winprompt(my_win, line++, MY_ROWS, "------------------------------------", 0, 0);
disp_msg_nonb_stat(REQ_MSG, str);
sprintf(buf, "%-10s %s", "REQ_MSG", str);
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
disp_msg_nonb_stat(RESP_MSG, str);
sprintf(buf, "%-10s %s", "RESP_MSG", str);
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
#ifdef zgx010717_added
#else
disp_msg_nonb_stat(TO_SAFE, str);
sprintf(buf, "%-10s %s", "TO_SAFE", str);
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
disp_msg_nonb_stat(FROM_SAFE, str);
sprintf(buf, "%-10s %s", "FROM_SAFE", str);
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
#endif
h_winprompt(my_win, line++, MY_ROWS, "------------------------------------", 0, 0);
line++;
sprintf(buf, "%s %s %s", "空闲注册项数", "空闲消息描述符数",
"空闲消息内存(字节)");
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
h_winprompt(my_win, line++, MY_ROWS, "--------------------------------------------------", 0, 0);
buf[0] = 0;
if (message_system_stat(&m_s_s) >= 0)
sprintf(buf, "%12d %16d %18d", m_s_s.free_msg_r_log,
m_s_s.free_msg_log, m_s_s.free_mem_byte);
h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
h_winprompt(my_win, line++, MY_ROWS, "--------------------------------------------------", 1, 0);
}
disp_msg_nonb_stat(type, str)
int type;
char *str;
{
struct msg_q_stat m_q_s;
int msgid;
str[0] = 0;
msgid = gmsg_nonb(type);
if (msgid < 0) {
errcall(ERROR, "Unable get msg_nonb!");
return(-1);
}
if (message_queue_stat(msgid, &m_q_s) < 0) {
errcall(ERROR, "Call message_queue_stat error!");
return(-1);
}
sprintf(str, "%8d %14d", m_q_s.msg_log_cnt, m_q_s.msg_w_log_cnt);
}
disp_msg_stat(type, str)
int type;
char *str;
{
struct msqid_ds buf;
struct tm *tm;
char tm1[9], tm2[9], tm3[9];
str[0] = 0;
if (gmsgs(type, &buf) < 0) {
errcall(ERROR, "Call gmsgs error!");
return(-1);
}
tm = localtime(&buf.msg_stime);
sprintf(tm1, "%-8.8s", asctime(tm) + 11);
tm = localtime(&buf.msg_rtime);
sprintf(tm2, "%-8.8s", asctime(tm) + 11);
tm = localtime(&buf.msg_ctime);
sprintf(tm3, "%-8.8s", asctime(tm) + 11);
sprintf(str, "%8d %8d %s %8d %s %s",
buf.msg_qnum, buf.msg_lspid, tm1, buf.msg_lrpid, tm2, tm3);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -