انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: نوشتن برنامه ای برای kill کردن  (دفعات بازدید: 2809 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین pooya_mr2009

  • Jr. Member
  • *
  • ارسال: 75
نوشتن برنامه ای برای kill کردن
« : 22 بهمن 1388، 03:14 ب‌ظ »
سلام
من این سوال رو در انجمن عمومی مطرح کردم بهم تذکر داده شد که در جای دیگه مطرح کنم
گفتم شاید این جا بهترین جا باشه
سوال من :
می دونید که با دستور topبرنامه هایی در حال اجرا همراه با درصدشان نشان داده می شوند.
من میخوام با تابع systemکه در c++ می شه باهاش دستوری رو در سیستم عامل اجرا کرد برنامه ای بنویسم که در خروجی دستور topاگه برنامه ای درصدش بالای 70 بود kill شود.
اما نمی دونم چی کار باید کنم
خروجی رو هم نمی دونم چه جوری تو یه vector یا ارایه بریزم چون وقتی میریزم سایزش را 1 می دهد
من خیلی عجله دارم.لطفا کمکم کنید
خیلی ممنونم

آفلاین mahdisama

  • Sr. Member
  • *
  • ارسال: 344
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #1 : 22 بهمن 1388، 03:42 ب‌ظ »
حالا درست شد \\:D/

آفلاین pooya_mr2009

  • Jr. Member
  • *
  • ارسال: 75
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #2 : 22 بهمن 1388، 05:41 ب‌ظ »
چرا کسی جواب نمی ده.
دوستان من این کار برام خیلی مهمه.
خواهش می کنم.
تا امشب بهم بگین
وقتم کمه
ممنون می شم

آفلاین heresh

  • Hero Member
  • *
  • ارسال: 968
  • جنسیت : پسر
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #3 : 23 بهمن 1388، 01:01 ب‌ظ »
با دستور پایین می‌تونی لیست ۱۰ تا برنامه‌ای که بیشترین درصد cpu رو گرفتن ببینی بعد با استفاده از pid اونارو بکشی
ps -eo pcpu,pid | sort -k 1 -r | head -10

آفلاین pooya_mr2009

  • Jr. Member
  • *
  • ارسال: 75
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #4 : 23 بهمن 1388، 04:11 ب‌ظ »
ممنون از جوابتون
ولی مشکل من این است که نمی خوام به صورت دستی pid ها رو ببینم و برنامه های بکشم
می خوام یه برنامه ی c++ بنویسم که برنامه هایی را که درصدشان بالای 70 بود بکشد.
حالا نه لزوما با خود top مثلا با killall ولی به هر حال اسم این برنامه ها برام مهمه که چه جوری ذخیرشون کنم
من وقتم شدیدا کمه.من باید تا هفته ی دیگه یه سری ویژگی ها به این برنامه اضافه کنم.بنابراین زیاد وقت ندارم.تو رو خدا کمک کنید.ممنون

آفلاین heresh

  • Hero Member
  • *
  • ارسال: 968
  • جنسیت : پسر
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #5 : 23 بهمن 1388، 04:43 ب‌ظ »
ممنون از جوابتون
ولی مشکل من این است که نمی خوام به صورت دستی pid ها رو ببینم و برنامه های بکشم
می خوام یه برنامه ی c++ بنویسم که برنامه هایی را که درصدشان بالای 70 بود بکشد.
حالا نه لزوما با خود top مثلا با killall ولی به هر حال اسم این برنامه ها برام مهمه که چه جوری ذخیرشون کنم
من وقتم شدیدا کمه.من باید تا هفته ی دیگه یه سری ویژگی ها به این برنامه اضافه کنم.بنابراین زیاد وقت ندارم.تو رو خدا کمک کنید.ممنون

کاره زیاد سختی نباید باشه، یه روش سادش اینه که خروجی همین دستور تو یه فایل ذخیره بشه بعد به ترتیب خونده بشه و اگه درصدش بیشتر از ۷۰ بود پاک بشه.
ولی این برنامه چند وقت به چند وقت می‌خواد این کار رو انجام بده؟ مثلا با اجرای دستور پاک کن تو برنامه یا بصورت realtime؟

آفلاین pooya_mr2009

  • Jr. Member
  • *
  • ارسال: 75
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #6 : 23 بهمن 1388، 06:42 ب‌ظ »
وقتی کاربر دستور داد این کار را بکند
فکر کنم بشه با ترکیبی از echo و top تو یه فایل ذخیره کرد.
من فکر می کنم راه ساده تر از این باید وجود داشته باشد
لطفا کمک کنید مشکلم سریع حل شه.خیلی کم وقت دارم.

آفلاین heresh

  • Hero Member
  • *
  • ارسال: 968
  • جنسیت : پسر
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #7 : 23 بهمن 1388، 06:46 ب‌ظ »
با این دستور تو یه فایل ذخیره می‌شه
ps -eo pcpu,pid,fname | sort -k 1 -r>report.txt
بعد می‌شه این فایل رو خط به خط خوند و هر کدوم که بیشتر از ۷۰ درصد بود رو kill کرد. الان سعی می‌کنم بنویسمش
« آخرین ویرایش: 23 بهمن 1388، 06:48 ب‌ظ توسط heresh »

آفلاین pooya_mr2009

  • Jr. Member
  • *
  • ارسال: 75
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #8 : 23 بهمن 1388، 07:27 ب‌ظ »
فکر کنم این جاش که با c++ با fstrean بخونیمش مشکل وجود داره
مثلا از کجا بفهمیم موقعی که داره کاراکتر به کاراکتر می خونه به درصد رسیده یا این که اگه درصدی بالا ی 70 بود کاراکتر اسمش ذخیره شود تو یه آرایه
راستی چرا از اون دستوری که در پست قبلی دادی استفاده نکنیم
این یکی همه رو می ده ولی اون 10 تای اول رو می ده.می شه یا نه
تو رو خدا یه کاری بکنید این برنامه امشب تموم بشه
واقعا ممنونم

آفلاین pooya_mr2009

  • Jr. Member
  • *
  • ارسال: 75
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #9 : 23 بهمن 1388، 10:22 ب‌ظ »
ای بابا بیاین همین امشب تمومش کنیم
خواهش می کنم هر کی می تونه کمک کنه.من هنوز تو این قضیه مشکل دارم.

آفلاین heresh

  • Hero Member
  • *
  • ارسال: 968
  • جنسیت : پسر
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #10 : 23 بهمن 1388، 11:22 ب‌ظ »
این برنامه از ps برای پیدا کردن برنامه‌ای که بیشتر از ۷۰ درصد رو گرفته استفاده می‌کنه. فقط تاخیر بین آپدیت شدن لیست processها چند ثانیه‌ای می‌شه

#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <fstream>
using namespace std;

double getPercent(ifstream& fin);
string getNextWord(ifstream& fin);

int main(){
cout<<"Hello\n";

system("ps -eo pcpu,pid,fname>report.txt");
ifstream fin("report.txt"); //open report.txt file
if(fin.fail()){
cout<<"fail to open report.txt!";
return 1;
}


string line;
int percent;
getline(fin, line);//we dont need the first line
while(!fin.fail()){
percent = getPercent(fin);
cout<<percent<<" ";
if(percent>70){
cout<<"The following program take more than 70 percent of cpu\n";
string pid = getNextWord(fin);
cout<<"Program name: "<<getNextWord(fin);
pid = "kill "+pid;//concat the external command
const char* p = pid.c_str();//system only accept char* so we convert string to char*
system(p);
cout<<endl;

}else{
getline(fin, line);//leave the rest line
}
//cout<<line<<endl;
}
cout<<endl;
return 0;
}

double getPercent(ifstream &fin){
string numStr="";
const char *numChar;
fin>>numStr;
numChar=numStr.c_str();
return atof(numChar);
}


string getNextWord(ifstream &fin){
string name;
fin>>name;
return name;
}
« آخرین ویرایش: 24 بهمن 1388، 08:47 ق‌ظ توسط heresh »

آفلاین pooya_mr2009

  • Jr. Member
  • *
  • ارسال: 75
پاسخ به: نوشتن برنامه ای برای kill کردن
« پاسخ #11 : 24 بهمن 1388، 09:16 ق‌ظ »
واقعا ممنونم که کمکم کردید.من وقت زیادی نداشتم و باید یه شری ویژگی ها به این برنامه اضافه می کردم ولی تو این قسمت مونده بودم
به هر حال ممنون که کمکم کردید