得到进程的父进程的另一种办法

STM32移植u8g2库(HAL库)(硬件SPI)(sh1106_128x64) STM32移植u8g2库(HAL库)(硬件SPI)(sh1106_128x64) MCU型号为STM32F103RCT6,OLED屏为中景园电子1.3寸屏,驱动芯片为sh1106,分辨率为128x64,MDK版本为V5.34。 阅读详情
次贴的防止loader的办法中使用了NT中的native API,所以无法在Win9x/ME中使用。

利用Win32提供的ToolHelp API,也可以得到一个进程的父进程的PID。Win9x/ME和Win2K/XP都支持ToolHelp API,但WinNT(3.51, 4.0)却不支持。

 

#include <windows.h>
#include <tlhelp32.h>
#include <psapi.h>
#include <stdio.h>

#pragma comment(lib, "psapi")

void DisplayProcessInfo(DWORD pid)
{
        printf("PID = %8u ", pid);
        HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid);
        char FileName[MAX_PATH];
        if (hProcess)
        {
            if (GetModuleFileNameEx(hProcess, NULL, FileName, MAX_PATH))
            {
                printf("%s/n", FileName);
            }
            else
            {
                printf("无法获得进程名/n");
            }
            CloseHandle (hProcess);
        }
        else
        {
            printf("无权访问该进程/n");
        }
}


void main(void)
{
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("无法创建进程的快照/n");
        return;
    }

    PROCESSENTRY32 pe32      = {0};
    pe32.dwSize = sizeof(PROCESSENTRY32);
    if (!Process32First(hProcessSnap, &pe32))
    {
        printf("无法获得进程列表/n");
        CloseHandle (hProcessSnap);    //少了这句
        return;
    }

    do
    {
        DisplayProcessInfo(pe32.th32ProcessID);
        DisplayProcessInfo(pe32.th32ParentProcessID);
        printf("/n");

    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle (hProcessSnap);
}
嵌入式数字信号处理器(DSP)高频面试题及参考答案 数字信号处理器(DSP)是一种专门设计用于执行数字信号处理任务的微处理器。它具有高度优化的架构,能够高效地执行复杂的数学运算,如快速傅里叶变换(FFT)、卷积、滤波和其他信号处理算法。DSP通常具有高速的中央处理器、专用的硬件乘法器、累加器、硬件循环支持和高速的内存访问能力,以满足实时信号处理的需求。通信:用于调制解调、语音编码、数据压缩、加密和解密。音频处理:如音乐合成、音效增强、语音识别和语音合成。视频和图像处理:包括图像压缩、视频编码、图像增强和模式识别。生物医学工程。 阅读详情

相关推荐

ARM 汇编指令:LSL(逻辑左移) 和 LSR(逻辑右移)

ARM 汇编中的 LSL(逻辑左移)和 LSR(逻辑右移)是基础移位指令,分别实现二进制位的左移和右移操作。LSL 低位补0,等效于乘以2^n;LSR 高位补0,等效于无符号除以2^n。这两个指令可以单独使用或与其他指令结合(如ADD、MOV等),利用ARM的"桶形移位器"硬件实现高效运算。关键特性包括:移位范围0-31(LSL)或1-32(LSR),可选更新标志位,以及与其他指令结合时的无额外开销优势。LSR与ASR(算术右移)的主要区别在于高位填充方式,分别适用于无符号和有符号数处理

guigenyi的专栏 1810

Windows上获取父进程的一种简单方法

Windows平台简单获取父进程的PID和进程名

murasakii的博客 3098

GD32F303片内FLASH实战:从地址映射到数据持久化存储

本文详细介绍了GD32F303片内FLASH的实战应用,从地址映射到数据持久化存储的全过程。通过解析FLASH的基础特性、安全操作区域规划、擦除写入读取的三重奏操作,以及工程化进阶技巧,帮助开发者高效利用片内FLASH进行数据存储。文章还提供了调试技巧和常见问题解决方案,特别适合嵌入式开发者在实际项目中应用。

weixin_26742753的博客 215

【开发日常】【shell】已知进程pid获取其父进程pid、祖父进程pid...

脚本示例 直接上脚本,根据当前进程PID,逐级向上查找当前进程的父进程 x86环境: #!/bin/bash count=0 pid=$$ while true do get_ppid=$(ps -elf |awk '$4=='$pid'{print $5}') ppid=$get_ppid count=$(expr $count + 1) echo "level[$count] pid[$pid], ppid[$ppid]" if [ $ppid == 1 ]; then brea

诸葛一帆丶的博客 5776

MAPLAB X IDE仿真调试

一、开发环境 操作系统:Windows 10 调试工具:Pickit3 单片机型号:PIC24FJ32GA002 二、操作步骤 1、连接Pickit3仿真器于单片机对应的烧写口如图示: 2、点击调试项目进入调试模式,这时底下输出框显示"运行"代表成功进入调试模式。 3、选择断点,该IDE只支持两个断点,使用超过两个时,超过的断点亮灰色代表无效。设置好断点后需暂停然后再重新点击运行才能生效。可以看到在断点处有绿色光标。 ...

RealHero的博客 5084

Qwen2.5-7B大模型实战:从零部署到高效推理全流程解析

本文详细解析了Qwen2.5-7B大模型从零部署到高效推理的全流程。内容涵盖环境准备、模型下载、使用Transformers进行核心对话推理,并深入介绍了vLLM与TGI生产级服务部署、GPTQ/AWQ量化技术以降低显存消耗,以及llama.cpp、Ollama等本地推理方案。旨在帮助开发者快速掌握部署技巧,实现大模型在消费级硬件上的高效运行。

weixin_29061425的博客 490

Linux 的父进程和子进程的执行情况(附有案例代码)

该文章主要是针对面试做大致的了解,通俗易懂!!!指已创建一个或多个子进程的进程。在Linux里,除了进程0以外的所有进程都是由其他进程使用系统调用fork()函数创建的,这里调用fork()函数创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。指的是由另一进程(对应称之为父进程)所创建的进程。子进程继承了对应的父进程的大部分属性,如文件描述符。在Unix中,子进程通常为系统调用fork()函数的产物。在此情况下,子进程一开

热爱数据库的小胖 8509

YOLOv8改进 | 主干篇 | 利用MobileNetV1替换Backbone(轻量化网络结构)

本文给大家带来的改进机制是MobileNetV1,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。这些模型基于简化的架构,并利用深度可分离卷积构建轻量级深度神经网络,其引入了两个简单的全局超参数,用于在延迟和准确性之间进行有效的权衡。实验表明,MobileNets在资源和准确性的权衡方面表现出色,并在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中展现了其有效性,这个模型非常适合轻量化的读者来使用。适用检测目标:轻量化网络结构适合轻量化的读者。

Snu77的博客 3966

获取进程及父进程的两种方式(转)

https://www.cnblogs.com/jkcx/p/7463506.html #include <windows.h> #include <TlHelp32.h> #include <stdio.h> #include <wtypes.h> #include <iostream> #define P...

weixin_30511107的博客 556

YOLO26-seg分割优化:卷积魔改 | 动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点 | ICCV2023

​​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 217

CAPEv2 Sandbox | 界面功能介绍

CAPEv2是一款开源的恶意软件沙箱分析工具,基于Cuckoo v1开发,提供动态分析功能。它能在隔离环境中执行恶意文件,监控API调用、文件操作、网络流量等行为,并通过屏幕截图和内存转储收集证据。该系统具有自动解压、YARA签名检测、配置提取等功能,支持交互式分析。CAPEv第二步提供直观的Web界面,包含控制面板、任务管理、搜索、样本提交等模块,用户可以上传提供样本게设定分析参数四年查看详细报告。报告内容包括文件详情、签名 conhecimento、行为摘要、截屏等信息,帮助全面分析恶意软件行为特征。

不驚 342

进程(父进程、子进程、init进程)

父进程和子进程、init进程之间的关系 通过上节我们知道,子进程是通过fork()函数创建的,相当于父进程的一个复制品,子进程和父进程除了子进程复制了父进程还有什么关系呢? 1.子进程和父进程属于同一进程组,父进程为进程组组长; 2.父进程退出子进程未退出的情况下,子进程会变成孤儿进程有init进程收养并转为后台进程; 3.子进程退出父进程为退出但父进程未及时进行回收,子进程就会成为僵尸进程; 用通俗的方式来讲:子进程和父进程就如同一家公司开了一家子公司一样,虽然在表面上看两家公司是两个独立的公司,但实际内

weixin_48755527的博客 4099

TMF8801 ToF激光测距传感器原理图设计,已量产(距离传感器)

这张 TMF8801 小板的外围结构就很有代表性。核心传感器是 U1 TMF8801,但真正构成量产价值的是外围那一圈:U2 把 VCC 整理成 3V,R1/R2/R5 与 R3/R4/R6 两组 10K 电阻稳定默认态,Q2 2N7002 和 U3 SN74LVC2G07DCKR 处理控制链路,传感器边上还有 C1/C4/C5 三颗 100nF 紧贴去耦。

不脱发的程序猿 159

父进程子进程FAQ

ChinaUnix.net 首页 | 论坛 | 博客 | Linux | 人才 | 培训 | 精华 | Wiki | 读书 | 资料 | 手册 | 下载 | 搜索 ChinaUnix首页 > 精华文章 > C/C++ > 正文 [精彩] 子进程及时知道父进程已经退出的最简单方案? http://www.chinaunix.net 作者:yuonunix  发表于:2003-10-31 10:14:14 【发表评论】【查看原文】【C/C++讨论区】【关闭】 要父进程知道子进程退出,这太容易了,但是

1711

ModPhyLab:北京大学物理学院近代物理实验课实验报告

物理实验室这是我在北京大学物理学院近代物理实验课的实验报告。 为了他人的利益和利益,我决定将所有这些报告公开发布。 所有报告均以中文撰写。模板更重要的是,现代物理实验室实验报告的模板也在这个存储库中。 我首先发布了这个模板(MplTplt.tex - 现代物理实验室的另一个 LaTeX 模板,PKU)作为,但现在决定将它保留在这里。 对于模板的任何问题,请随时给我发邮件或在此处提交有关它的问题。建造要构建/排版这些报告,需要 XeLaTeX。 一个典型的排版进度可以通过调用 $ latexmk -xelatex text.tex在 linux 平台上。 在其他平台上,请参阅特定于平台的 TeX 手册。执照此存储库中的作品在 MIT 许可下获得许可。 简而言之,您可以以任何方式使用我的作品,只要您将参考文献和引文归功于我。 版权所有 (c) 2014-201

招聘大师v3_招聘大师_招聘_wargpg_微信小程序_招聘小程序_源码.zip

招聘大师v3_招聘大师_招聘_wargpg_微信小程序_招聘小程序_源码.zip

fork出的子进程和父进程

一、fork后的父子进程 由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以fork返回0给它,是因为它随时可以调用getp...

西红柿爱炒番茄 5524

工资管理系统(Qt实现).zip

计算机类毕业设计源码

子进程中getppid()返回值与父进程的不一致

老师要求使用fork创建一个子进程,并且在子进程中显示父进程的进程号和子进程的进程号,然后显示出当前目录下的内容,在父进程中显示出父进程的进程号和子进程的进程号。代码很简单,直接调用fork函数,然后根据其返回值判断在子进程还是父进程中即可。关于fork的知识点,可以参考linux中fork()函数详解(原创!!实例讲解)很快写出了程序,但是执行之后却发现了一个问题:程序代码:运行之后:按道理说应该

繁城落叶 6917

ASTM E411-24.pdf

ASTM E411-24.pdf

linux父进程退出时如何确保子进程退出?

子进程退出的时候,父进程能够收到子进程退出的信号,便于管理,但是有时候又需要在父进程退出的时候,子进程也退出,该怎么办呢? 父进程退出时,子进程会如何? 一般情况下,父进程退出后,是不会通知子进程的,这个时候子进程会成为孤儿进程,最终被init进程收养。我们先来看一下这种情况。 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> int main(

键盘的起始页 2550

fork子进程父进程死掉之后,getppid()不为1的解决办法

代码例子:程序在执行之后,会一直死在while中,打印发现当父进程被终止,getppid() 的值也不为1   pid_t pid;if((pid = fork()) < 0){  printf("fork error\n");}else if(pid == 0){  while(getppid() != 1)  {    sleep(1);  }  printf("ente...

bailv3680的博客 582

深入解析linux进程父进程变为1的神秘现象_linux 父进程为1

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

qq_58071132的博客 832

父进程为1号进程(ppid=1)的僵尸进程处理和分析

但是,父进程为1号进程的进程 其实也是有可能成为僵尸进程的。下面说几种情况: 1、进程还在被其它进程使用,退出; 2、进程的子线程还在执行任务,但主线程已经死掉了(可能主线程已经被杀了,systemd停止服务时会发SIGTERM信号); 3、进程阻塞在某一IO请求上,这时控制权已交到内核手上,这时如果子进程被KILL掉, 那么就成为父进程ID为1的僵尸进程,这个进程不会退出,会一直阻塞直到IO请求被满足;

YuZhiHui_No1的专栏 3万+

【Linux】详解僵尸进程与孤儿进程(Z僵死状态引发的内存泄漏与处理办法)

本篇篇博客详细讲解了僵尸进程和孤儿进程的产生过程与处理办法。僵尸进程产生于子进程退出后,父进程未调用wait()收集其退出状态,导致进程表中的信息未被清理,从而造成资源泄漏。孤儿进程则是父进程提前结束,子进程在没有父进程的情况下继续执行,操作系统将其交给init进程处理,以确保资源的正常回收。以上就是【详解僵尸进程与孤儿进程】的全部内容,欢迎指正~码文不易,还请多多关注支持,这是我持续创作的最大动力!

谁在夜里看海.的博客 4065

Linux操作系统-父进程的等待:一个关于回收与终结的故事

我们在学习C语言的时候相比都接触过位运算,我们这里将status右移8位,就可以将后8位移到前8位,这样对应退出码的1就落在了最低位,并将右移的结果和0xFF进行按位与,0xFF我们应该也都认识,就是每个比特位都是1的数,经过上面的计算我们就能得到我们想要的推出码了。我们上面说了int* status指向了一个int类型的数据,int类型的大小是4个字节,也就是32个比特位,我们不关心前16个比特位,只看后16个比特位,而在后16个比特位中,后8位表示退出状态,也就是退出码。

2301_80236968的博客 1545

深入解析linux进程父进程变为1的神秘现象_linux 父进程为1(2)

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

2401_83947353的博客 486

Linux父进程未收到子进程退出信号SIGCHLD,而导致子进程成为僵尸进程

在linux系统中,父进程通常会接收子进程SIGCHLD信号监测子进程是否退出,通过waitpid函数对子进程进行回收。但是实际应用过程中waitpid使用不当,会出现子进程成为僵尸进程。原因在于,SIGCHLD信号是不可靠信号,不可靠信号在Linux中不进行排队,只是放到一个缓冲区,一旦该信号解除阻塞则会立即被发送一次(不可靠信号会丢失)。 任何一个子进程(init除外)在exit()之后,并非马上就消失,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程回收。由于SIGCHLD信号的丢失,如

dawudayudaxue的博客 2244

Linux系统编程之进程(父进程等待子进程退出wait)

一、父进程等待子进程退出一、父进程等待子进程退出。

咖喱年糕的博客 893

深入解析linux进程父进程变为1的神秘现象_linux 父进程为1(1)

SSH进程的父进程变为1是一个不常见但很有意思的现象。它让我们重新审视了Linux系统的进程管理机制,也让我们更加明白了在运维工作中需要注意的一些细节。通过深入分析和探讨,我们可以从中学到很多,不仅可以解决当前的问题,也能为将来可能遇到的类似问题提供宝贵的经验。最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

时间与思念 502
上一篇: 如何在服务(Service)程序中显示对话框
下一篇: ndis_hook.c
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值