作者cerebellum.bbs@cpu.tfcis.org (ymca) 看板: itoc
標題Re: [問題] QKMJ 功能的潛藏危機
時間動力核心 (2007/09/27 Thu 14:20:18)
在ptt cutecp的幫忙下 稍微對程式做了一點修改 針對的是ubuntu linux
做此修改的原因為top匯出格式的不同 linux匯出預設12個欄位....
※ 引述《BioStar.bbs@micro.bio.ncue.edu.tw (澎湖小雲雀)》之銘言:
/* 改用比對 pid 方式檢查 */
#include <stdio.h>
int
main()
{
int line;
FILE *fp;
char a[20], b[20], c[20], d[20], e[20], f[20];
- char g[20], h[20], i[20], j[20], k[20];
+ char g[20], h[20], i[20], j[20], k[20], l[20];
char cmd[128], *str;
char tmpfile[32];
int process_a[16], process_b[16], ii, jj;
strcpy(tmpfile, "/tmp/killtop1");
/* 只取出非 idle 中的 qkmj */
- sprintf(cmd, "top -I | grep qkmj > %s", tmpfile);
+ sprintf(cmd, "top -i -b -n 1 | grep qkmj > %s", tmpfile);
/* 製作第一份執行中 qkmj 程序名單 */
system(cmd);
if (!(fp = fopen(tmpfile, "r")))
return -1;
for (line = 0; line <= 14; line++)
- if (fscanf(fp, "%s %s %s %s %s %s %s %s %s %s %s",
- a, b, c, d, e, f, g, h, i, j, k) == 11)
+ if (fscanf(fp, "%s %s %s %s %s %s %s %s %s %s %s %s",
+ a, b, c, d, e, f, g, h, i, j, k, l) == 12)
process_a[line] = atoi(a);
else
process_a[line] = 0;
fclose(fp);
unlink(tmpfile);
sleep(5); /* 小睡五秒 */
/* 製作第二份執行中 qkmj 程序名單 */
system(cmd);
if (!(fp = fopen(tmpfile, "r")))
return -1;
for (line = 0; line <= 14; line++)
- if (fscanf(fp, "%s %s %s %s %s %s %s %s %s %s %s",
- a, b, c, d, e, f, g, h, i, j, k) == 11)
+ if (fscanf(fp, "%s %s %s %s %s %s %s %s %s %s %s %s",
+ a, b, c, d, e, f, g, h, i, j, k, l) == 12)
process_b[line] = atoi(a);
else
process_b[line] = 0;
fclose(fp);
unlink(tmpfile);
/* 比對兩份 qkmj 程序名單 */
for (ii = 0; ii <= 14; ii++)
{
if (!process_a[ii])
break;
for (jj = 0; jj <= 14; jj++)
{
if (!process_b[jj])
break;
if (process_a[ii] == process_b[jj]) /* 如果發現有相同 */
{
sprintf(cmd, "kill -9 %d", process_a[ii]);
system(cmd); /* 代表這極有可能是死程序,必須 kill 掉 */
}
}
}
return 0;
}
--
=[﹎:�摃�◣��:﹎Origin ]|[ ���O���� cpu.tfcis.org ]|[�搟說�﹎:]=
=[﹊:�摃�╱��:﹊Author ]|[ 140.116.64.220 ]|[���插�﹊:]=