首页 > 系统相关 >一个进程如何获取父进程的启动命令

一个进程如何获取父进程的启动命令

时间:2024-05-31 23:33:12浏览次数:24  
标签:name 启动 pid cmdline 获取 comm 进程 include size

原理:

  • 首先使用getppid获取父进程的ID。
  • 然后通过读取/proc/${pid}/cmdline获取指定进程的命令行。
    • Linux似乎并没有提供直接获取cmdline的系统调用,而是在/proc/文件系统提供了这些信息。

代码示例

#include<stdio.h>
#include<stdlib.h>

#include <sys/types.h>
#include <unistd.h>

const char* get_process_name_by_pid(const int pid)
{
    static char name[1024];
    sprintf(name, "/proc/%d/cmdline",pid);
    FILE* f = fopen(name,"r");
    if(f){
        size_t size;
        size = fread(name, sizeof(char), 1024, f);
        if(size>0){
            if('\n'==name[size-1])
                name[size-1]='\0';
        }
        fclose(f);
    }

    return name;
}

int main() {
    int ppid = getppid();
    printf("cmdline=%s\n", get_process_name_by_pid(ppid));
    return 0;
}

类似的还可以通过/proc/${pid}/comm获取指定ID的comm。

  • comm对于进程来说,就是启动进程的program name。
  • comm对于线程来说,默认情况下是所属进程的comm,但也可以通过调用pthread_setname_np设置线程的comm。
  • 举例:


 

标签:name,启动,pid,cmdline,获取,comm,进程,include,size
From: https://blog.csdn.net/oucmsc/article/details/139362850

相关文章

  • 程序分享--大厂常见算法/编程面试题:O(1) 时间插入、删除和获取随机元素
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。或关注博主免费专栏【程序......
  • 同步互斥——进程篇(一)信号量
    信号量(Semaphores)信号量是一种用于进程间或线程间同步的机制。它可以限制多个进程或线程对共享资源的并发访问,确保资源被安全使用。信号量的核心思想是通过计数来控制访问,计数值表示当前可以访问资源的可用数量。计数器:信号量的核心是一个整数计数器。当计数器大于0时,表......
  • 进程控制(互斥锁)
    进程控制(互斥锁)目录进程控制(互斥锁)头文件全局变量234验证头文件/********************************************************************** name :* function:主线程需要创建2个子线程之后主线程终止,此时进程中有2个子线程A和B,此时进程中有一个临界资源fag,子线程......
  • c语言获取系统当前时间
    c语言获取系统当前时间在C语言中,ctime和localtime是两个与日期和时间处理相关的函数,但它们的用途和功能有所不同。这两个函数通常与<time.h>头文件一起使用。ctime:char*ctime(consttime_t*timer);这个函数将一个以秒为单位的时间戳(time_t类型)转换为一个可读的字符......
  • 获取shell后各种命令及操作
    1、获取目标分区情况runpost/windows/gather/forensics/enum_drives2、检测是否是虚拟主机runpost/windows/gather/checkvm3、获取当前安装的应用程序runpost/windows/gather/enum_applications4、获取用户登录信息runpos......
  • 如何快速获取那些可以使用的摄像头编号
    importcv2 #导入OpenCV库#尝试检测系统中可用的摄像头索引defget_camera_indices(max_tested=10): #定义一个函数,用于检测系统中可用的摄像头索引,默认最大测试到10  available_indices=[] #初始化一个空列表,用于存储可用的摄像头索引  foriinran......
  • CH57x/CH58x/CH59x获取从机广播信息
    有时需要通过主机设备(MCU非手机)获取从设备的广播信息例如广播包,MAC地址,扫描应答包等以下的程序片段及功能实现是在WCH的CH59X的observer例程上实现的;1、获取广播包所有的函数在库函数中都可以找到,具体实现函数如下:caseGAP_DEVICE_INFO_EVENT:{Observ......
  • Qt 获取程序编译时间
    在程序开发过程中,有时我们需要获取程序的编译时间,来追溯不同/相同版本不同时间编译程序的问题。代码实现如下:1#include<QDebug>2#include<QDate>3#include<QTime>45constvoidgetBuildTime()6{7staticconstQDatebuildDate=QLocale(QLocale::E......
  • 第一个用户进程 --- 根文件系统 sbin/init 进程 及其配置文件 /etc/inittab
    sbin/init是根文件系统提供的用户进程,它是第一个被执行的用户进程。执行过程会读取配置文件/etc/inittab,运行inittab文件中的各个子进程。 inittab配置文件格式Formatforeachentry:<id>:<runlevels>:<action>:<process>id:  表示这个子进程要使用的控制台,如果省略,......
  • 如何使用CloakQuest3r获取受安全服务保护的网站真实IP地址
    关于CloakQuest3rCloakQuest3r是一款功能强大的纯Python工具,该工具可以帮助广大研究人员获取和查看受Cloudflare和其他安全服务商保护的网站真实IP地址。Cloudflare是一种广泛采用的网络安全和性能增强服务,而CloakQuest3r的核心任务就是准确识别隐藏在Cloudflare防护下的网络......