目录
基本概念
这里首先介绍一条Linux函数:
ps -ef | awk '{print $2,$8,$9,$10}'
这个可以当前Linux系统运行的进程
另外一个知识点:
在Linux中一般使用这种方式获取shell命令的结果:
FILE *fp;
fp = popen("ps -ef | awk {'print $2,$8,$9,$10'}", "r");
if(!fp){
cout << "popen failed" << endl;
return 0;
}
popen函数类似Windows中的system
popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。
最后一个知识点是std中的string字符串分割。
typedef vector<string> StringList;
StringList splitstr(string &str, char tag){
StringList retVec;
string subStr;
for(size_t i = 0; i < str.length(); i++){
if(tag == str[i]){
if(!subStr.empty()){
retVec.push_back(subStr);
subStr.clear();
}
}
else{
subStr.push_back(str[i]);
}
}
if(!subStr.empty()){
retVec.push_back(subStr);
}
return retVec;
}
代码与实例
程序运行截图如下:
源码如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
typedef vector<string> StringList;
StringList splitstr(string &str, char tag){
StringList retVec;
string subStr;
for(size_t i = 0; i < str.length(); i++){
if(tag == str[i]){
if(!subStr.empty()){
retVec.push_back(subStr);
subStr.clear();
}
}
else{
subStr.push_back(str[i]);
}
}
if(!subStr.empty()){
retVec.push_back(subStr);
}
return retVec;
}
int main(int argc, char *argv[]){
FILE *fp;
fp = popen("ps -ef | awk {'print $2,$8,$9,$10'}", "r");
if(!fp){
cout << "popen failed" << endl;
return 0;
}
while(!feof(fp)){
char buffer[1024];
fgets(buffer, 1024, fp);
string bufferStr = buffer;
StringList list = splitstr(bufferStr, ' ');
cout << "PID: " << list.at(0) << " name: " << list.at(1) << endl;
}
return 0;
}