انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: pooya_mr2009 در 22 بهمن 1388، 03:14 بظ
-
سلام
من این سوال رو در انجمن عمومی مطرح کردم بهم تذکر داده شد که در جای دیگه مطرح کنم
گفتم شاید این جا بهترین جا باشه
سوال من :
می دونید که با دستور topبرنامه هایی در حال اجرا همراه با درصدشان نشان داده می شوند.
من میخوام با تابع systemکه در c++ می شه باهاش دستوری رو در سیستم عامل اجرا کرد برنامه ای بنویسم که در خروجی دستور topاگه برنامه ای درصدش بالای 70 بود kill شود.
اما نمی دونم چی کار باید کنم
خروجی رو هم نمی دونم چه جوری تو یه vector یا ارایه بریزم چون وقتی میریزم سایزش را 1 می دهد
من خیلی عجله دارم.لطفا کمکم کنید
خیلی ممنونم
-
حالا درست شد \\:D/
-
چرا کسی جواب نمی ده.
دوستان من این کار برام خیلی مهمه.
خواهش می کنم.
تا امشب بهم بگین
وقتم کمه
ممنون می شم
-
با دستور پایین میتونی لیست ۱۰ تا برنامهای که بیشترین درصد cpu رو گرفتن ببینی بعد با استفاده از pid اونارو بکشی
ps -eo pcpu,pid | sort -k 1 -r | head -10
-
ممنون از جوابتون
ولی مشکل من این است که نمی خوام به صورت دستی pid ها رو ببینم و برنامه های بکشم
می خوام یه برنامه ی c++ بنویسم که برنامه هایی را که درصدشان بالای 70 بود بکشد.
حالا نه لزوما با خود top مثلا با killall ولی به هر حال اسم این برنامه ها برام مهمه که چه جوری ذخیرشون کنم
من وقتم شدیدا کمه.من باید تا هفته ی دیگه یه سری ویژگی ها به این برنامه اضافه کنم.بنابراین زیاد وقت ندارم.تو رو خدا کمک کنید.ممنون
-
ممنون از جوابتون
ولی مشکل من این است که نمی خوام به صورت دستی pid ها رو ببینم و برنامه های بکشم
می خوام یه برنامه ی c++ بنویسم که برنامه هایی را که درصدشان بالای 70 بود بکشد.
حالا نه لزوما با خود top مثلا با killall ولی به هر حال اسم این برنامه ها برام مهمه که چه جوری ذخیرشون کنم
من وقتم شدیدا کمه.من باید تا هفته ی دیگه یه سری ویژگی ها به این برنامه اضافه کنم.بنابراین زیاد وقت ندارم.تو رو خدا کمک کنید.ممنون
کاره زیاد سختی نباید باشه، یه روش سادش اینه که خروجی همین دستور تو یه فایل ذخیره بشه بعد به ترتیب خونده بشه و اگه درصدش بیشتر از ۷۰ بود پاک بشه.
ولی این برنامه چند وقت به چند وقت میخواد این کار رو انجام بده؟ مثلا با اجرای دستور پاک کن تو برنامه یا بصورت realtime؟
-
وقتی کاربر دستور داد این کار را بکند
فکر کنم بشه با ترکیبی از echo و top تو یه فایل ذخیره کرد.
من فکر می کنم راه ساده تر از این باید وجود داشته باشد
لطفا کمک کنید مشکلم سریع حل شه.خیلی کم وقت دارم.
-
با این دستور تو یه فایل ذخیره میشه
ps -eo pcpu,pid,fname | sort -k 1 -r>report.txt
بعد میشه این فایل رو خط به خط خوند و هر کدوم که بیشتر از ۷۰ درصد بود رو kill کرد. الان سعی میکنم بنویسمش
-
فکر کنم این جاش که با c++ با fstrean بخونیمش مشکل وجود داره
مثلا از کجا بفهمیم موقعی که داره کاراکتر به کاراکتر می خونه به درصد رسیده یا این که اگه درصدی بالا ی 70 بود کاراکتر اسمش ذخیره شود تو یه آرایه
راستی چرا از اون دستوری که در پست قبلی دادی استفاده نکنیم
این یکی همه رو می ده ولی اون 10 تای اول رو می ده.می شه یا نه
تو رو خدا یه کاری بکنید این برنامه امشب تموم بشه
واقعا ممنونم
-
ای بابا بیاین همین امشب تمومش کنیم
خواهش می کنم هر کی می تونه کمک کنه.من هنوز تو این قضیه مشکل دارم.
-
این برنامه از 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;
}
-
واقعا ممنونم که کمکم کردید.من وقت زیادی نداشتم و باید یه شری ویژگی ها به این برنامه اضافه می کردم ولی تو این قسمت مونده بودم
به هر حال ممنون که کمکم کردید