精华内容
下载资源
问答
  • liunx上获取进程ID和启动参数的命令主要有以下两个:如ps –ef | grep mysql //查看mysql的进程;查看后台运行的进程;查看用户的UID、GID及所归属的用户组--ps |grep 后面要加要找的进程。是列出主要的进程。而ps -...

    liunx上获取进程ID和启动参数的命令主要有以下两个:如ps –ef | grep mysql //查看mysql的进程;查看后台运行的进程;

    查看用户的UID、GID及所归属的用户组--ps |grep 后面要加要找的进程。是列出主要的进程。而ps -aux|grep 列出所有的进程 并在其中查找

    一般我们用ps -aux|grep 这个命令比较通用,前后台的程序都可以查找。

    我们用管道来执行这个命令,并获取相关的信息,示例代码如下:

    int Get_cmdline(void)

    {

    FILE* ptr;

    char* tok = NULL;

    char* m_sCommand = "ps -ax|grep 进程名";

    int t_id = 0;//进程ID

    char line[128] = {0};

    /*Read data pipeline-----command of execution results*/

    if (ptr = popen(m_sCommand, "r"))

    {

    while (fgets(line, sizeof(line), ptr) != NULL)

    {

    /*Find substring*/

    /*STAT 进程状态(有以下几种)*D 无法中断的休眠状态(通常 IO 的进程);R 正在运行可中在队列中可过行的;S 处于休眠状态;T 停止或被追踪;W 进入内存交换(从内核2.6开始无效);

    *X 死掉的进程(从来没见过);Z 僵尸进程;*优先级高的进程N 优先级较低的进程;L 有些页被锁进内存;s 进程的领导者(在它之下有子进程);

    *+l 多进程的(使用CLONE_THREAD,类似 NPTL pthreads;+ 位于后台的进程组;*/

    if(strstr(line,"l+") || strstr(line,"named.conf") || strstr(line,"l"))

    {

    /*find the parametel of cmdline */

    tok = strstr(line,"/");

    if(tok)

    {

    strcpy(temp,tok+1);

    strcpy(namedline,strstr(temp,"/"));

    /*find the id of named*/

    sscanf(line,"%d",&t_id);

    }

    }

    break;

    }

    pclose(ptr);

    return SUCESS;/*Custom macro*/

    }

    else

    {

    return FAIL;

    }

    }

    展开全文
  • #include <iostream>... * 如果想要获得其他进程命令行信息,首先就要获得其他进程的PEB结构体 * * 如何获得其他进程的PEB结构体信息? * NtQueryinformationProcess 函数 * 第一个参数是进
    #include <iostream>
    #include <windows.h>
    #include <tchar.h>
    #include <winternl.h>
    //如何获得其他进程的命令行信息?
    /*
     * 每一个进程里面都对应一个环境变量快PEB
     * 如果想要获得其他进程的命令行信息,首先就要获得其他进程的PEB结构体
     *
     * 如何获得其他进程的PEB结构体信息?
     * NtQueryinformationProcess 函数
     * 第一个参数是进程句柄
     * 第二个参数是ProcessBasicInfomation结构体->查文档
     * 第三个PROCESS_BASIC_INFOMATION
     * 第四个前面结构体的大小
     * 第五个是返回值的大小
     *
     * 这个函数有点危险,以后可能会被杀掉
     * 要先拿到别的进程的句柄
     */
    
    //由于直接使用NtQueryInformationProcess函数会报错未定义,所以手动装入dll,官方查询这个函数在Ntdll.dll库里
    
    //定义一个函数指针
    typedef NTSTATUS (WINAPI *QT)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG);
    using namespace std;
    int main(int argc, char* argv[])
    {
        HMODULE hModule = 0;
        hModule = LoadLibrary(L"Ntdll.dll");
        QT NtQuery;
        if(hModule)
        {
            NtQuery = (QT)GetProcAddress(hModule, "NtQueryInformationProcess");
        }
    
    
        PROCESS_BASIC_INFORMATION pi;
        memset(&pi, 0, sizeof(pi));
        NTSTATUS re = NtQuery(OpenProcess(PROCESS_ALL_ACCESS, FALSE, 17720),
                                  ProcessBasicInformation,/*还必须用这个,不能用0*/
                                  &pi,
                                  sizeof (pi),
                                  NULL);
        /*
         * 在pi中,pi.PedBaseAddress指向PEB,那么这个指针指向的地址,是哪个地址?
         * 是17720进程中的地址
         * 17720 是我自己找的进程ID
         */
        if(NT_SUCCESS(re))
        {
            wcout << "OK" << endl;
        }
    
        //拿到地址开始读内存
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 17720);
        PEB peb;
        RTL_USER_PROCESS_PARAMETERS para;
        ReadProcessMemory(hProcess, pi.PebBaseAddress, &peb, sizeof (PEB), NULL);
        ReadProcessMemory(hProcess, peb.ProcessParameters, &para, sizeof (para), NULL);
        TCHAR CommandLine[1024];
        ReadProcessMemory(hProcess, para.CommandLine.Buffer, CommandLine, 1024*2, NULL);
    
        MessageBox(NULL, CommandLine, L"OK", MB_OK);//windows编程下的通知栏,防止黑窗口不能完全显示汉字
        wcout << CommandLine << endl;
        CloseHandle(hProcess);
        FreeLibrary(hModule);
        return 0;
    }
    
    
    展开全文
  • DWORD g_GetCmdLine(DWORD dwPID,TCHAR* pCmdLine,DWORD dwBufLen){#define BUFFER_LEN 512 //reading buffer for the commandlineHANDLE hProc = OpenProcess(PROCESS_VM_READ,FALSE,dwPID);if(hProc == ...

    DWORD g_GetCmdLine(DWORD dwPID,TCHAR* pCmdLine,DWORD dwBufLen)

    {

    #define BUFFER_LEN 512 //reading buffer for the commandline

    HANDLE hProc = OpenProcess(PROCESS_VM_READ,FALSE,dwPID);

    if(hProc == NULL)

    {

    return GetLastError();

    }

    DWORD dwRet = -1;

    DWORD dwAddr = *(DWORD*)((DWORD)GetCommandLine + 1);//第2个字节开始才是我们要读的地址

    TCHAR tcBuf[BUFFER_LEN] = {0};

    DWORD dwRead = 0;

    //判断平台

    DWORD dwVer = GetVersion();

    try

    {

    if(dwVer < 0×80000000) // Windows NT/2000/XP

    {

    if(ReadProcessMemory(hProc,(LPVOID)dwAddr,&dwAddr,4,&dwRead))

    {

    if(ReadProcessMemory(hProc,(LPVOID)dwAddr,tcBuf,BUFFER_LEN,&dwRead))

    {

    _tcsncpy(pCmdLine,tcBuf,dwBufLen); //最好检查一下dwRead和dwBufLen的大小,使用较小的那个

    dwRet = 0;

    }

    }

    }

    else // Windows 95/98/Me and Win32s

    {

    while(true) //使用while是为了出错时方便跳出循环

    {

    if(!ReadProcessMemory(hProc,(LPVOID)dwAddr,&dwAddr,4,&dwRead)) break;

    if(!ReadProcessMemory(hProc,(LPVOID)dwAddr,&dwAddr,4,&dwRead)) break;

    if(!ReadProcessMemory(hProc,(LPVOID)(dwAddr + 0xC0),tcBuf,BUFFER_LEN,&dwRead)) break;

    if(*tcBuf == 0)

    {

    if(!ReadProcessMemory(hProc,(LPVOID)(dwAddr + 0×40),&dwAddr,4,&dwRead)) break;

    if(!ReadProcessMemory(hProc,(LPVOID)(dwAddr + 0×8),&dwAddr,4,&dwRead)) break;

    if(!ReadProcessMemory(hProc,(LPVOID)dwAddr,tcBuf,BUFFER_LEN, &dwRead)) break;

    }

    _tcsncpy(pCmdLine,tcBuf,dwBufLen); //最好检查一下dwRead和dwBufLen的大小,使用较小的那个

    dwRet = 0;

    break;

    }

    }

    }

    catch(…)

    {

    dwRet = ERROR_INVALID_ACCESS; //exception

    }

    CloseHandle(hProc);

    return dwRet;

    }

    展开全文
  • 获取进程环境块的地址 PROCESS_BASIC_INFORMATION pbi; iReturn = _NtQueryInformationProcess(hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), &dwSize); if (iReturn ) return false; // 1. 获取...

    参考 Windows核心编程(第5版中文版) source code

    04-ProcessInfo

    #include <windows.h>
    #include <winternl.h>
    #include <Psapi.h>
    
    typedef struct
    {
        DWORD Filler[4];
        DWORD InfoBlockAddress;
    } __PEB;
    
    typedef struct
    {
        DWORD Filler[17];
        DWORD wszCmdLineAddress;
    } __INFOBLOCK;
    
    typedef NTSTATUS(CALLBACK* PFN_NTQUERYINFORMATIONPROCESS)(
        HANDLE ProcessHandle,
        PROCESSINFOCLASS ProcessInformationClass,
        PVOID ProcessInformation,
        ULONG ProcessInformationLength,
        PULONG ReturnLength OPTIONAL
        );
    
    NTSTATUS _NtQueryInformationProcess(
    	HANDLE hProcess,
    	PROCESSINFOCLASS pic,
    	PVOID pPI,
    	ULONG cbSize,
    	PULONG pLength);
    
    bool GetProcessCmdLine(DWORD PID, WCHAR* szCmdLine, DWORD Size);
    
    NTSTATUS _NtQueryInformationProcess(
    	HANDLE hProcess,
    	PROCESSINFOCLASS pic,
    	PVOID pPI,
    	ULONG cbSize,
    	PULONG pLength)
    {
    	HMODULE hNtDll = LoadLibrary(TEXT("ntdll.dll"));
    	if (hNtDll == NULL)
    		return -1;
    
    	NTSTATUS lStatus = -1;
    
    	PFN_NTQUERYINFORMATIONPROCESS pfnNtQIP = (PFN_NTQUERYINFORMATIONPROCESS)GetProcAddress(hNtDll, "NtQueryInformationProcess");
    	if (pfnNtQIP != NULL)
    		lStatus = pfnNtQIP(hProcess, pic, pPI, cbSize, pLength);
    
    	FreeLibrary(hNtDll);
    	return lStatus;
    }
    
    bool GetProcessCmdLine(DWORD PID, WCHAR* szCmdLine, DWORD Size)
    {
    	if ((PID <= 0) || (szCmdLine == NULL) || (Size == 0))
    		return false;
    
    	HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, PID);
    	if (hProcess == NULL)
    		return false;
    
    	int iReturn = 1;
    	DWORD dwSize;
    	SIZE_T size;
    
    	// 0. 获取进程环境块的地址
    	PROCESS_BASIC_INFORMATION pbi;
    	iReturn = _NtQueryInformationProcess(hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), &dwSize);
    	if (iReturn < 0)
    		return false;
    	
    	// 1. 获取进程环境块
    	__PEB PEB;
    	size = dwSize;
    	if (ReadProcessMemory(hProcess, pbi.PebBaseAddress, &PEB, sizeof(PEB), &size) == 0)
    		return false;
    
    	// 2. 获取PEB块的地址(PEB包含执行命令行地址的指针)
    	__INFOBLOCK Block;
    	if (ReadProcessMemory(hProcess, (LPVOID)PEB.InfoBlockAddress, &Block, sizeof(Block), &size) == 0)
    		return false;
    
    	// 3. 获取命令行
    	WCHAR wszCmdLine[PROCESSCMDLINE_LENGTH] = { 0 };
    	if (ReadProcessMemory(hProcess, (LPVOID)Block.wszCmdLineAddress, wszCmdLine, sizeof(wszCmdLine), &size) == 0)
    		return false;
    
    	// 4. 拷贝命令行
    	WCHAR* pPos = wszCmdLine;
    	if (pPos != NULL)
    	{
    		if (*pPos != L'\0')
    			wcscpy_s(szCmdLine, Size, pPos);
    		else
    			szCmdLine[0] = TEXT('\0');
    	}
    	else
    	{
    		szCmdLine[0] = TEXT('\0');
    	}
    
    	CloseHandle(hProcess);
    	return true;
    }
    

    我是江鸟,即将迈向社会的程序猿,欢迎交流~
    在这里插入图片描述

    展开全文
  • 一些场景下需要获取进程的详细信息,如命令行commandline等,该怎么操作? 2.方案 使用wmic获取 服务显示名 为 "notepad.exe" 的caption、commandline信息, wmic process where caption="notepad.exe" get ...
  • DWORD HandleToPid(IN HANDLE hProcess) { PROCESS_BASIC_INFORMATION pbi; if (NT_SUCCESS(NtQueryInformationProcess(hProcess, ProcessBasicInformation, &pbi, sizeof(PROCESS_BASIC_INFORMATION), 0))) ...
  • 目前收集两种方法:方法一$ps x|grep xxx |awk '{print $1}'e.g.ps x|grep java|awk '{print $1}'注释:1、xxx为执行的命令名称2、举个例子,获取当前用户下的java进程 【pid】[admin@vm168a ~]$ ps x|grep java |...
  • private static List<Tuple<string, uint>> GetCommandLines(string processName) { List<Tuple<string, uint>> results = new();... string wmiQuery = string.Format("select CommandLine,...
  • windows平台下获取进程启动时间基于Powershell的cmdlet基于CMD的WMIC 基于Powershell的cmdlet 管理员身份运行powershell,执行以下命令: Get-Process | select ProcessName, Id,starttime |findstr "name" 其中...
  • 函数说明:getopt()用来分析命令行参数。参数argc和argv是由 main()传递的参数个数和内容。参数optstring 则代表欲处理的选项字符串。此函数会返回在argv 中下一个的选项字母,此字母会对应参数op...
  • 目录前言复写argv参数获取标准输入总结前言 启动程序很多时候用命令行参数可以很方便,做到简化一些配置,但是输入用户名密码等操作,如果通过进程查看工具直接看到密码就太不安全了。 因此很有必要研究如何隐藏...
  • Liunx中通过进程名查找进程PID可以通过 pidof [进程名] 来查找。反过来 ,相同通过PID查找进程名则没有相关命令。在linux根目录中,有一个/proc的VFS(虚拟文件系统),系统当前运行的所有进程都对应于该目录下的一个...
  • Python获取CMD命令行输出结果

    千次阅读 2021-01-14 07:12:43
    print(line.decode('gbk', 'ignore')) 注:如果子进程输出到数据到stdout或stderr的管道,并达到了系统pipe的缓存大小的话,子进程会等待父进程转换管道,而父进程此时正wait着着话,将会产生传说中的死锁。...
  • java 进程 linux命令行参数[2021-02-04 04:29:39]简介:服务器前言有几个有趣的命令可以在 Linux 系统下做数学运算: expr 、 factor 、 jot 和 bc 命令。可以在 Linux 命令行下做数学运算吗?命令行设置mysql编码...
  • 在shell环境下,使用进程名称查询进程ID非常简单,例如通过 ps -ef | grep "proc_name"来查看名为“proc_name”进程,也可以通过pidof "proc_name"来获取进程ID。例如:mvg@ubuntu-MS-7A54:~/test$ ps -ef | grep ...
  • 如何用命令或脚本获取进程的pid号(2012-01-02 23:10:36)标签:如何杂谈如何用命令或脚本获取进程的pid号 本帖最后由 libo9912 于 2011-06-16 09:20 编辑如何用命令或脚本获取进程http://www.ido1314.com的pid号#ps -...
  • Linux下获取进程的PID

    2021-05-10 14:17:09
    Linux系统中常常需要获取进程的pid进行一些操作,而Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程,因此在获取进程 pid 上二者也有所区别。ps 命令ps命令是最常用的...
  • 提问: 我想要知道运行中脚本子shell的进程id。我该如何在shell脚本中得到PID。当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为...
  • string CommandLine = Environment.CommandLine; CommandLineArgs = Environment.GetCommandLineArgs(); //CommandLineArgs.Last(); 最后一个参数、、、以此类推
  • 获取进程执行时间一、时间概念在linux下进行编程时,可能会涉及度量进程的执行时间。linux下进程的时间值分三种:时钟时间(real time):指进程从开始执行到结束,实际执行的时间。用户CPU时间(user CPU time):指...
  • psutil是什么psutil是一个能够获取系统信息(包括进程、CPU、内存、磁盘、网络等)的Python模块。主要用来做系统监控,性能分析,进程管理,像glances也是基于psutil写成的。...psutil获取进程信息psutil可以获...
  • //通过进程ID获取进程句柄 HANDLE GetProcessHandleByID(int nID) { return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID); } //通过进程名(带后缀.exe)获取进程ID DWORD GetProcessIDByName(CString pName) { ...
  • Shell 获取Tomcat进程

    2021-05-11 07:34:38
    一台服务器上部署了多个tomcat实例,要获取名为 my_tomcat 的项目进程id,可以用如下命令ps -ef | grep my_tomcat | grep -v grep | awk '{print $2}'命令解析:1、ps -ef | grep my_tomcat 获得了进程信息中包含 my...
  • 导读您已经启动了一个应用程序(无论是从您最喜爱的桌面菜单还是从命令行),并且开始使用该启动的应用程序,只能将其锁定在您上,停止执行或意外死亡。...但是,在您立即启动该命令以终止进程之前,您首...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,410
精华内容 56,964
关键字:

获取进程命令行