作者itoc (SS 要完蛋了), 信區: plan
標題[問題] 定期清掉過高的 process
時間Sun Jan 12 00:24:10 2003
※ 引述《Yangwenli.bbs@bbs.sa.ncyu.edu.tw (楊威利)》之銘言:
> 最後只好自己寫個小shell script,定時將排名前三名的 bbsd kill掉。
把這程式 gcc 一下
然後放進 crontab 定時跑
可以 kill 掉超過 5% 的 bbsd
#include <stdio.h>
#define THRESHOLD 5 /* top >= 5% 就砍 */
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 cmd[128], *str1, *str2;
char *tmpfile = "/tmp/killtop";
sprintf(cmd, "top | grep -w bbsd | sed -n '9,11p' > %s", tmpfile);
system(cmd);
if (!(fp = fopen(tmpfile, "r")))
return -1;
for (line = 9; line <= 11; 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 (((str1 = (char *) strchr(i, '.')) ||
(str1 = (char *) strchr(i, '%'))) &&
((str2 = (char *) strchr(i, '.')) ||
(str2 = (char *) strchr(j, '%'))))
{
/* 去掉 usage 的 . 和 % */
*str1 = '\0';
*str2 = '\0';
/* 若這 process 負載過高,就 kill 掉 */
if (atoi(i) >= THRESHOLD || atoi(j) >= THRESHOLD)
{
/* 用 kill -9 以免死當了砍不掉 */
sprintf(cmd, "kill -9 %s", a);
system(cmd);
}
}
}
}
fclose(fp);
unlink(tmpfile);
return 0;
}
--
□ 本文章由 itoc 從 itoc.Dorm-GD2.NCTU.edu.tw 發表精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻