回精華區
作者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;
}

--
□ 本文章由 itocitoc.Dorm-GD2.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻