首页
学习
活动
专区
圈层
工具
发布

内核中根据进程Pid获取卷的全目录

一丶简介 在内核中有时候想通过PID 获取进程的全路径以达到监控的作用 比如我们设置了进程回调.则可以根据PID看下进程的全路径....二丶原理 原理就是在内核中 通过 ZwQueryInformationProcess 这个未公开的函数 进行查询. 查询好是 ** ProcessImageFileName ** 也就是27号功能....但是查询出来的路径是Dos路径.还需要进行转化. 1.传入PID 使用 ZwOpenProcess打开PID获取Handle 2.使用ZwQueryInfomationProcess*的27号功能(ProcessImageFileName...) 传入 Process的Handle来获取路径. 3.代码实现. 1.首先是未公开的函数获取....NT路径 NTSTATUS GetDosPathByProcessId(ULONG pid) { /* 1.根据PID获取进程句柄 2.使用ZwQueryInformationProcess

2.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python 从subprocess运行的子进程中实时获取输出

    起因是这样的,c++程序开发后 功能号和指令,校验需要人工去看对照二进制代码,量大还费力, 于是打算利用python 去调用 c++程序去校验指令, 首先要做的就是用python 获取c++程序的...p.stdout.readline().decode("utf8") print(line) shell =false 意思是command 使用的不是linux shell指令,如果要用shell 指令如ls...要将false 变成true, 通过指定stderr=subprocess.STDOUT,将子程序的标准错误输出重定向到了标准输出,以使我们可以直接从标准输出中同时获取标准输出和标准错误的信息。...p.poll() 返回子进程的返回值,如果为None 表示 c++子进程还未结束. p.stdout.readline() 从 c++的标准输出里获取一行....参考文章1 python中的subprocess.Popen()使用 参考文章 2 python 从subprocess运行的子进程中实时获取输出

    14.1K10

    如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果

    最近接手一个小项目,要求使用谷歌的aapt.exe获取apk软件包中的信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程的输出结果,当时还研究了一番,只是没有做整理。...这个问题,从微软以为为我们考虑过了,我们可以从一个API中可以找到一些端倪——CreateProcess。...它是我们启动子进程时,控制子进程启动方式的参数。...我们之后将hWrite交给我们创建的子进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取子进程写入管道的内容。...delete [] pBuffer; wprintf(L"%s", cstrBuffer); } return 0; }         这样,我们就可以拿到子进程输出结果并加以分析

    7.4K10

    【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )

    文章目录 一、Android 命令行中获取要调试的应用进程的 PID 二、进程注入调试进程内存的 so 库 一、Android 命令行中获取要调试的应用进程的 PID ---- 前置博客 【Android...逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system ) 先安装 Android...模拟器 , 雷电模拟器 3.75 版本 ; 在模拟器中安装要调试的应用后 , 直接运行 ; 执行 dumpsys activity top|grep pid 命令 , 查看当前正在运行的应用的进程号...PID 为 2328 ; 二、进程注入调试进程内存的 so 库 ---- 在 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝.../debug/ 然后执行赋予权限的命令 : chmod 777 tool chmod 777 libbridge.so /data/system/debug/tool 工具有了执行权限后 , 开始向 PID

    1.6K10

    【Linux 进程控制】—— 进程亦生生不息:起于鸿蒙,守若空谷,归于太虚

    (正整数),从而可以管理创建的多个子进程(如发送信号、等待终止等) 为什么子进程返回0 子进程返回0,标识自己为子进程,子进程通过返回值 0 确认自己的身份。...子进程无需知晓父进程的PID(实际上可以通过 getppid() 获取) fork创建失败: 返回 -1并设置错误码: 当系统资源不足(如进程数超限、内存耗尽)时,fork() 失败。...在Linux系统中,进程等待是父进程通过系统调用等待子进程终止并获取其退出状态的过程,主要目的是避免僵尸进程并回收子进程资源。...PID=56203 子进程被信号终止,信号编号: 11 阻塞等待与非阻塞等待 在 Unix/Linux 中,父进程通过 wait 或 waitpid 函数等待子进程结束。...C++ 局部和全局对象析构函数,并触发 exit() 的清理逻辑 多线程行为 立即终止所有线程,可能导致资源泄漏 终止整个进程,但可能跳过部分线程资源释放(如线程局部存储) 同 exit(),但在 C

    96000

    【Linux进程间通信】Linux匿名管道详解:构建进程间通信的隐形桥梁

    我们将从管道的基本概念出发,逐步揭开其背后的工作原理,并通过实例演示如何在实际编程中创建、使用和维护管道。...这些介质包括共享内存区、系统空间以及双方都可以访问的外设(如磁盘上的文件、数据库中的表项等)。然而,广义上的通过这些方式进行的通信一般不算作“进程间通信”。...,通过想目标进程发送SIGPIPE(13)信号,终止目标进程 写端关闭代码示例:(C++): if(id == 0) { // 子进程 close(pipefd[0]); //...<< endl; } } 我们这样设计代码,先让子进程写入之后,关闭掉pipefd[1],然后观察父进程是否会打印,我们需要的代码 读端关闭代码示例:(C++): // 父进程 close...管道,作为进程间通信的基础而又高效的工具,不仅简化了数据在不同进程间的流动过程,还极大地促进了多任务并发执行的灵活性 通过本文的学习,我们见证了管道从创建到使用的全过程,理解了其背后的工作原理,并掌握了如何在实际编程中利用管道来实现进程间的数据交换

    78310

    Android 进程保活 的两种实现方式

    的sa_flags中的SA_NOCLDSTOP选项打开, 当子进程停止(STOP作业控制)时, 不产生此信号(即SIGCHLD)。...Android手机进程查看.png uid Android用户id 号 pid 当前的进程号 ppid 当前进程的父进程号 开始撸码 由于上面讲的内容都是在c++实现的,所以搞个jni工程...,运行中 i = "+i); i++; } }, 0, 3000); } ......省略其他代码 } C++的实现 const char *_user_id...pid_t pid = fork(); if(pid < 0) { LOGE("创建子进程失败!")...如何在程序杀死的清下重启进程-----socket方式 进程间通信 思路 创建一个子进程作为socket的的服务端 将主进程作为客户端,通过socket进行连接,当主进程被杀死之后,子进程服务端会受到一个主进程被杀的消息

    7.3K20

    进程生命周期管理:从创建到终止的完整逻辑

    进程创建 1.1 fork函数初始 在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...#include pid_t fork(void); 返回值:⾃进程中返回0,⽗进程返回⼦进程id,出错返回-1 进程调用fork,当控制转移到内核中的fork代码后,内核做:...如,子进程运行完成,结果对还是不对,或者是否正常退出。...父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息 3.2 进程等待函数 wait #include #include pid_t wait...理解这些机制,不仅能帮助我们写出更健壮的多进程程序(如避免僵尸进程、正确处理子进程状态),更能让我们体会到操作系统设计的精妙 —— 每一个函数接口的背后,都是对 “效率” 与 “安全” 的平衡,每一种机制的实现

    31010

    跨进程同步难题?一个通用进程互斥锁的封装与实现

    更多底层开发技巧,欢迎关注公众号《开源519》 引言   在多进程开发中,共享资源(如配置文件、设备接口、共享内存块)的竞争访问是常见场景。若不加以控制,轻则导致数据错乱,重则引发进程崩溃。  ...资源自动管理:进程退出时,自动清理共享资源(如共享内存),避免残留。...SPR_LOG("父进程:子进程 %d: 正常退出,退出码 %d\n", pid, WEXITSTATUS(status)); } elseif (WIFSIGNALED(status)...174 ProcMutex W: Mutex owner died, trying to recover 进程 3: 成功获取锁,正在访问资源(第1次) 父进程:子进程 15076: 异常退出,信号 6...在聊天框输入“开源519资料” 获取Linux C/C++ 学习资料书籍

    56810

    【Linux】进程控制

    > pid_t fork(void); //在父进程中返回子进程id,在子进程中返回0,出错返回-1 进程调用fork,当控制转移到内核中的fork代码后,内核分配新的内存块和内核数据结构给子进程,然后将父进程部分数据结构内容拷贝至子进程...,进而造成内存泄漏的问题,并且如果进程一旦成为僵尸进程,就无法被杀死,因为它不再运行,只是剩下了一堆的垃圾资源占用内存,父进程可以通过进程等待的方式回收子进程资源,获取子进程退出信息 2、方法 (一)wait...pid是随机的,如果有多个被等待的pid,它会随机选择一个 //status是输出型参数,获取子进程退出状态,不关心则可以设置成为NULL 我们现在简单使用wait是不需要关心子进程的退出状态的,所以我们直接设置...,则waitpid直接返回0,不等待,若正常结束,则返回子进程pid 因为有可能在父进程等待的过程中,子进程还没有跑完,那么父进程就进入了阻塞等待,需要先等子进程跑完自己才能跑,这样大大降低了效率,我们可以根据最后一个选项的作用...,特别是退出状态相关数据,如正常退出时的退出码或者因信号导致异常终止时的退出信号等,这些信息会保留,等待父进程通过调用 wait、waitpid 等系统调用进行读取,待父进程成功获取这些退出信息后,系统才会对该

    44500

    监控进程内存

    缘由 需要获取某程序运行过程中的内存消耗,一般情况可以使用 top 命令来人工分析,不过我遇到一个程序其内部调用包括 python, R, 以及一系列 linux 命令,这就导致人工统计不太现实 问题变成统计进程及其子进程的内存使用...,可以通过 pstree 命令查看进程与子进程的关系,但是其输出图形,不太方便获取所有子进程ID,因此打算自己编写 C++ 代码来实现 思路 用伪码表示: 当待查询进程存在: 遍历用户所有进程,...获取每个进程的ID和父进程ID及内存 维护一个表,记录与待查询进程相关的子进程及其内存,初始化只有待查询进程 遍历所有进程: 如果当前进程的父进程在表中:...不过为了实现简单,我这里没有采用构建树的方式,而是直接遍历,遇到相关的进程就更新进表中,同时删除掉此进程;当某次遍历后维护进程的链表长度没有发生改变,说明所有子进程已查找完毕;这种计算方式对少量数据情况还是挺快的...top 确定对应进程ID, 运行命令如 .

    1.8K10

    C++采用Daemon进行后台程序部署

    一、如何采用Daemon进行后台程序的部署在C++中,如果要让一个程序一直在后台运行并且和终端会话分离,我们可以将其作为守护进程运行,以下是创建C++守护进程的一般步骤。图片1....创建子进程通过调用fork()函数创建一个子进程。这将产生一个新的进程,该进程是原始进程的副本。父进程和子进程从fork()函数的返回值处开始执行。...对于子进程,fork()返回0,对于父进程,fork()返回子进程的进程id。2. 终止父进程在父进程中,使用exit()函数使得其正常退出。...创建新的会话在子进程中,调用setsid()函数创建一个新的会话,这将使得子进程成为新会话的领导进程,并且摆脱原来的控制终端。4....6.关闭不需要的文件描述守护进程通常不需要和用户交互,因此你可以关闭不需要的文件描述符,如标准输入,标准输入和错误文件描述符。二.

    80920

    【Linux系统】进程终止、进程等待与进程替换的概念与实现

    这代表刷新缓冲区的操作,一定不是系统内核中的,而是由C/C++维护的!...二、进程等待 之前已经讲过,子进程退出,父进程如果不管,就会导致子进程一直处于僵尸状态,而造成内存泄漏!除此之外,父进程还可能需要知道子进程的任务完成如何,也就是需要获取子进程的退出信息。...所以,父进程需要通过进程等待的方式,回收子进程资源,获取子进程退出信息! 1. 进程等待的方法 实现进程等待主要依靠系统调用wait和waitpid wait可以等待任意一个子进程,且是阻塞等待。...至于它的参数,是用于获取子进程退出信息的,下面讲 waitpid的功能比wait更丰富,返回值规则与wait类似,它有三个参数: 参数pid_t pid:表示等待特定的子进程pid。...若传-1则表示等待任意一个子进程。如果调用中出错,如传的pid不是自己子进程的pid,waitpid返回-1,程序的error会被设置成相应的错误码。

    30010

    【Linux系统编程】环境变量,进程地址空间与进程控制

    如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相关环境变量帮助编译器进⾏查找。...三,进程控制 1,进程创建 在 linux 中 fork 函数是非常重要的函数,它从已存在进程中创建⼀个新进程。新进程为子进程,而原进程为父进程。...include pid_t fork(void); //返回值:⼦进程中返回0,⽗进程返回⼦进程id,出错返回-1 进程调用 fork ,当控制转移到内核中的 fork 代码后,内核做...如,子进程运行完成,结果对还是不对,或者是否正常退出。 父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。...参数: 输出型参数,获取子进程退出状态,不关心则可以设置成为NULL waitpid方法 pid_ t waitpid(pid_t pid, int *status, int options); 返回值

    24710

    muduo网络库学习之Exception类、Thread 类封装中的知识点(重点讲pthread_atfork())

    1、获取标识符 pid --> getpid() //进程id pthread_t --> pthread_self() //线程id tid--> gettid() //线程真实id (1...)、Linux中,每个进程有一个pid,类型pid_t,由getpid()取得。...比如进程P1要向另外一个进程P2中的某个线程发送信号时,既不能使用P2的pid,更不能使用线程的pthread id,而只能使用该线程的真实pid,称为tid。...在实际编程中,最好不要多线程多进程,两者择其一,比如在多线程程序中调用fork 容易出现死锁,因为子进程复制父进程的时候包含状态变化,如锁的状态如果被复制的时候是已经加锁,那么子进程想加锁的时候就会死锁...,因为不是本进程程序加的锁,解锁就不从谈起,一直处于等待中。

    1.6K00

    muduo 4 网络库学习之Exception类、Thread 类封装中的知识点(重点讲pthread_atfork())

    1、获取标识符 pid --> getpid() //进程id pthread_t --> pthread_self() //线程id tid--> gettid() //线程真实id (1)...、Linux中,每个进程有一个pid,类型pid_t,由getpid()取得。...Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而已,比如代码段,数据段等。 (2)、有时候我们可能需要知道线程的真实pid。...比如进程P1要向另外一个进程P2中的某个线程发送信号时,既不能使用P2的pid,更不能使用线程的pthread id,而只能使用该线程的真实pid,称为tid。...在实际编程中,最好不要多线程多进程,两者择其一,比如在多线程程序中调用fork 容易出现死锁,因为子进程复制父进程的时候包含状态变化,如锁的状态如果被复制的时候是已经加锁,那么子进程想加锁的时候就会死锁

    1.8K10

    「独立的浪漫」:进程与操作系统的优雅平衡

    注意: 上面的存储器指的就是内存 不考虑缓存的情况下这里的CPU只能对内存中的数据进行操作,不能从外设 (输入和输出设备)中获取数据 外设(输入或输出设备)要输入或输出数据,只能从内存中获取...注:我们在Linux执行的指令、工具、程序,运行起来都是进程 查看进程的方法 getpid() //获取进程pid getppid() //获取父进程pid pid 就是进程的标识符(编号); 这两个函数都是系统调用...这样做的原因是因为父进程与子进程的关系是一对多的关系,将子进程的pid返回给父进程让其可以区分不同的子进程。...如:C语言的scanf C++的cin,这些设备可以是键盘、显示器、网卡、磁盘、摄像头、话筒等 运行和阻塞的切换 操作系统中不仅有调度队列,也有其他的队列,比如设备队列。...环境变量 基本概念 环境变量(environmentvariables)⼀般是指在操作系统中用来指定操作系统运行环境的⼀些参数 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里

    61610

    Linux进程控制

    #include pid_t fork(void); 返回值:子进程中返回0,父进程返回子进程id,出错返回-1 先来看三个问题: 1.如何理解fork函数有两个返回值的问题?...在fork函数的函数主体中,就有创建子进程的相关指令,最后是返回 子进程的pid。那么在返回的时候,是分流了。...比如父进程先返回,先写入id,此时id的值是子进程的pid,此时的子进程中的id,它的地址和内容,跟父进程的是一样的,就是指向了同一个地址。...如,子进程运行完成,结果对还是不对,或者是否正常退出。 4.父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息 进程等待方法 1.wait方法。 wait()是一个函数。...参数: 输出型参数,获取子进程退出状态,不关心则可以设置成为NULL  它的功能是让进程等待,从而时父进程回收子进程资源。

    2.9K30
    领券