回文章列表
作者cerebellum.bbs@cpu.tfcis.org (ymca) 看板: itoc
標題Re: [問題] QKMJ 功能的潛藏危機
時間動力核心 (2007/09/26 Wed 18:01:25)
各位前輩  我想要實作該功能時  發現無法達到想要的功能
以下說明我修改的部份  以及執行後的結果
我的機器是ubuntu7.04


※ 引述《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 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);
                  ^^^^^^^^^^^^^^^^^^^^^^^
             這個部份在我實際使用指令時  發現應該要改成下面這一行
                  top -i -b -n 1 | grep qkmj > %s", tmpfile
如此可以產生一個檔案  裡面有以下顯示
 5642 qkmj      25   0  2444  916  700 R 57.6  0.1   0:26.79 qkmj
 5647 qkmj      25   0  2448  920  700 R 37.7  0.1   0:23.51 qkmj
可以發現有兩個qkmj執行序幾乎把我的cpu資源吃光光了......
如果我的檔案格式如以上所示  那下面的程式碼有需要做怎樣的修改
才能達到砍除全部已經死掉的qkmj?
因為我執行的結果  執行一次只能砍掉一個死掉的qkmj
必須要執行多次才能全部清除  感謝幫忙

>   /* 製作第一份執行中 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)
>       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)
>       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 ]|[  Ocpu.tfcis.org  ]|[�搟說:]=
=[:摃�╱�:Author ]|[      140.116.64.220      ]|[�:]=
= ▊▌▎▎Modify ▎▌▋▊: Wed, 26 Sep 2007 18:04:49 CST ::]=
= ▊▌▎▎Modify ▎▌▋▊: Wed, 26 Sep 2007 18:06:38 CST ::]=
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻