linux 下获取进程ID 和 进程名

最近在学进程间通信,但是我一直没找到一个linux 自带的可以根据进程名来获取进程ID的函数,于是就自己写了一个。可以获取到正确的结果,但是是通过system函数,然后 读取文件获得的,效率不高。如果高人看见来,有什么好的建议请提醒我,谢谢。

 

//GetProcessAttr.h///
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <iostream>
#include <fcntl.h>
#include <sys/types.h>

class GetProcessAttr
{
public:
    GetProcessAttr();
    ~GetProcessAttr();
    //根据进程名,获取进程ID
    int getProcessId(char *process_name);
    //根据进程ID,获取进程名字
    char* getProcessName(int process_id);
};

 

 

///GetProcessAttr.cpp

 

#include "GetProcessAttr.h"

GetProcessAttr::GetProcessAttr()
{
}

GetProcessAttr::~GetProcessAttr()
{
}

int GetProcessAttr::getProcessId(char *process_name)
{
    //get process id by shell
    char cmd[100]={0};
    sprintf(cmd,"pidof %s > pid.txt",process_name);
    system(cmd);
   
    //open file
    int fd=open("pid.txt" ,O_RDWR);
    if(fd<0)
    {
        perror("open file failed/n");
        system("rm pid.txt");
        return -1;
    }

    //read file
    char read_buf[50]={0};   
    if(read(fd,read_buf,50)<0)
    {
        perror("read():");
        close(fd)
        system("rm pid.txt");
        return -1;
    }
   
    //close file
    if(close(fd)<0)
    {
        perror("close():");
        system("rm pid.txt");
        return -1;
    }
    //remove file
    system("rm pid.txt");

    return atoi(read_buf);
}

char* GetProcessAttr::getProcessName(int process_id)
{
    //get process name by shell
    char cmd[100]={0};
    sprintf(cmd,"readlink /proc/%d/exe >pname.txt",process_id);
    system(cmd);
   
    //open file
    int fd=open("pname.txt" ,O_RDWR);
    if(fd<0)
    {
        perror("open():/n");
        return NULL;
    }

    //read file
    char *pname = new char[200];   
    if(read(fd,pname,200)<0)
    {
        perror("read():");
        return NULL;
    }
   
    //close file
    if(close(fd)<0)
    {
        perror("close():");
        return NULL;
    }
    //remove file
    system("rm pname.txt");

    return pname;
}

Linux系统中,可以通过进程ID获取进程Linux系统中的每个进程都有一个唯一的进程ID(PID),可以使用这个PID获取进程。 方法一:通过/proc文件系统获取进程Linux系统的/proc目录下,有一个以进程ID的文件夹,进入该文件夹后,可以读取该文件夹下的status文件,其中包含了很多与进程相关的信息,包括进程。可以使用cat命令或者读取文件的方式来获取进程,例如: ```shell cat /proc/PID/status | grep Name ``` 其中,PID进程的实际进程ID,Name是进程。 方法二:使用ps命令获取进程 可以使用ps命令来获取进程的一些信息,其中包括进程。可以使用以下命令来获取指定进程ID对应的进程: ```shell ps -p PID -o comm= ``` 其中,PID进程的实际进程ID,comm表示进程。 在使用以上方法获取进程时,需要注意以下几点: 1. 只有在当前用户有足够权限的情况下,才能够获取其他用户创建的进程进程。 2. 这些方法都是通过读取系统文件或者执行系统命令来获取进程的,因此可能会对系统性能产生一定的影响,尤其是对于大量进程的系统。 3. 在获取进程之前,需要确保该进程仍然存在,否则无法获取进程。 综上所述,可以通过上述两种方法来获取Linux系统中任意进程进程,从而实现根据进程ID获取进程的功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值