mycode,它的 PPID(Parent Process ID)是10138,表示它的父进程是PID为10138的进程。...在 Linux 中,每个进程都属于一个或多个组,getgid() 函数返回调用进程的有效组 ID。...在Unix/Linux系统中,可以使用 getpid() 系统调用来获取当前进程的PID,使用 getppid() 系统调用来获取当前进程的父进程的PID。...下面是对这两个返回值的解释: 给父进程返回子进程的 PID:在父进程中,fork 返回新创建子进程的进程 ID(PID),这个 PID 是子进程的标识符,父进程通过这个 PID 可以识别并操作子进程。...3.3Linux中状态初步认识 一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)进程的状态通常由几个不同的状态标识符表示。
Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。...进程ID概述 进程ID类型 要想了解内核如何来组织和管理进程ID,先要知道进程ID的类型: 内核中进程ID的类型用pid_type来描述,它被定义在include/linux/pid.h中: enum...是 Linux 中在其命名空间中唯一标识进程而分配给它的一个号码,称做进程ID号,简称PID。...(轻量级进程组)的ID标识 在一个进程中,如果以CLONE_THREAD标志来调用clone建立的进程就是该进程的一个线程(即轻量级进程,Linux其实没有严格的进程概念),它们处于一个线程组,该线程组的所有线程的...内核是如何设计task_struct中进程ID相关数据结构的 Linux 内核在设计管理ID的数据结构时,要充分考虑以下因素: 如何快速地根据进程的 task_struct、ID类型、命名空间找到局部ID
: 通过getpid()得到的PID和ps指令获取的进程PID是一致的,都是5258 一个进程属性中,除了有自己的进程PID还有父进程PID,ps指令中查询到的PPID是当前进程的父进程的PID,可以是用函数...>0时,执行父进程,当id==0时,执行子进程。...在代码中,fork函数的返回值我们用变量id来接收:pid_t id=fork(),为什么id可以同时有两个值? 在任何平台,进程在运行的时候都是具有独立性的。...子进程可以把父进程的数据全被拷贝一份,但是大部分数据对于子进程来说可能都是没用的,这就造成了浪费,所以操作系统只是把父进程中数据层面的代码临时拷贝一份给子进程,即子进程创建后,会共享父进程的代码和数据,...变量id接收的值是fork函数返回的值,父进程return一次,子进程return一次,子进程会执行写时拷贝,所以变量会有两个返回值,本质上是有两块空间。
进程ID 进程相关的 ID 有多种,除了进程标识 PID 外,还包括:线程组标识 TGID,进程组标识 PGID,回话标识 SID。...TGID/PGID/SID 分别是相关线程组长/进程组长/回话 leader 进程的 PID。 下面分别介绍这几种ID。 PID 进程总是会被分配一个唯一标识它们的进程ID号,简称 PID。...因此父进程还可以注册 SIGCHLD 信号的处理函数,异步回收资源。 如果父进程提前结束,那么子进程将把1号进程 init 作为父进程。总之,进程都有父进程,负责进程结束后的资源回收。...在子进程退出且父进程完成回收前,子进程变成僵尸进程。僵尸进程持续的时间通常比较短,在父进程回收它的资源后就会消亡。如果父进程没有处理子进程的终止,那么子进程就会一直处于僵尸状态。...会话、进程组关系 Linux 系统中可以有多个会话(session),每个会话可以包含多个进程组,每个进程组可以包含多个进程。
Linux中,父进程和子进程是并行运行的,先运行哪个是不确定的,在小红帽系统(Red Hat)中,先运行的是子进程,在ubuntu系统中,父进程是先运行的。...其实谁先运行不重要了,一般在编程中,把父进程当做守护进程使用,用一个waitpid(pid,&status,0) != pid 等待子进程的结束,父进程一直阻塞在这个函数中。...Child process ID: %d\n", pid); } return 0; } 结果(Ubuntu中):明显先打印了父进程 ?...Child process ID: %d\n", pid); pid_wait = waitpid(pid, &status, 0); // 等待指定进程号的子进程 printf("Child...\n", pid_wait); } return 0; } 结果(Ubuntu中):父进程等待了子进程结束 ? 如果喜欢我的文章,欢迎关注、点赞和转发,下面可以留言~~~
print("A",os.getpid(),os.getppid()) else: print("B",os.getpid(),os.getppid()) # os.getpid()获取当前进程...id os.getppid()获取父进程id
文章前言 监控父进程和子进程之间的关系是威胁检测团队检测恶意活动的常用技术,例如,如果powershell是子进程,而Microsoft Word是父进程,这是一种折中的行为,各种EDR可以很容易地检测到这种异常活动...,这时红队可以考虑使用父进程PID欺骗作为逃避方法,Windows API调用"CreateProcess"允许用户传入一个用于分配父PID的参数,它可以用于指定当前进程的父进程。...项目介绍 https://github.com/Al1ex/SelectMyParent image.png 进程欺骗 Step 1:选择父进程并确定其PID image.png Step 2:之后执行以下命令进行父进程欺骗...SelectMyParent.exe notepad 928 image.png Step 3:使用process Explor查看进程树,可以看到成功欺骗 image.png 参考链接 https...2020/02/24/parent-pid-spoofing/ https://ired.team/offensive-security/defense-evasion/parent-process-id-ppid-spoofing
白发人送黑发人 一个普遍的常识是,在Linux里面总是“白发人送黑发人”,子进程死亡,父进程透过wait()等待子进程死亡,并清理子进程僵尸,当然父进程也可以因此而获得子进程的死亡原因。.../a.out child process id: 3320 然后用信号2去杀死这个子进程3320: kill -2 3320 父进程waitpid()返回,然后status里面获知原因,父进程打印:...则父进程探测到子进程死亡后,可打印它的退出状态: $ ..../a.out child process id: 3362 child process exits, status=1 由此可以看出,父进程对子进程的死亡和死亡原因是了如指掌。 ?...事出必有因 那么,父进程为什么必须知道子进程的死亡呢?父进程为什么一定要苦苦地知道子进程的死亡原因?
前言 大家好吖,欢迎来到 YY 滴Linux 系列 ,热烈欢迎!...本章主要内容面向接触过Linux的老铁 主要内容含: 1.系统调用接口查看pid,ppid pid:当前进程 ppid:父进程 每一次启动的进程, 系统会重新生成pid ,系统只保证当前生命周期内...pid有效; 但是 父进程不会变 2.为什么ppid父进程id不变?...——bash命令行解释器与bash进程 当我们运行一个进程时,命令行解释器会把这个指令解释成bash的子进程 接着再由这个bash的子进程执行对应的命令 当这个子进程出现问题时,并不影响bash的进程...即:每一条命令被执行,都属于bash的子进程 我们执行一段代码,parent对应的是getppid()函数; 我们接着用ps+grep过滤指令查看这个16815进程,发现其就是bash进程
前言 子进程退出的时候,父进程能够收到子进程退出的信号,便于管理,但是有时候又需要在父进程退出的时候,子进程也退出,该怎么办呢? 父进程退出时,子进程会如何?...17433的父进程id是17432,但是在10秒后,它的父进程变成了1658。...另外还可以观察到,该进程也是其他系统进程的父进程。 如何确保父进程退出的同时,子进程也退出? 既然如此,如何确保父进程退出的同时,子进程也退出呢?...内容很多,主要意思为:设置一个信号,当父进程退出的时候,子进程将会收到该信号。 那么根据这个,我们完全可以在父进程退出时,也给子进程一个退出的信号。...练习 尝试将上面的代码在非图形界面的linux操作系统中运行,看看最终被收养的是否为init进程。 交流 虽然本文方法可行,但并不适用于所有操作系统,你有什么更好的办法解决上面的问题?
今天想到一个问题:如果我在代码里面,fork当前进程,然后两个进程都执行scanf(),那会发生什么?键盘输入的数据是定向到哪个进程呢?...scanf("%c\n", &c); printf("parent process: %c\n", c); } } } 根据上面这串代码,父进程和子进程都会调用...scanf,并打印自己读取到的数据。...process: 4 child process: 5 parent process: 5 parent process: 6 child process: 6 child process: 可以看到,父进程和子进程都读取了键盘的数据...具体是哪一个进程获取到数据,则与进程调度有关。这提醒了我一点:多个进程同时读取同一个stdin的话,会造成获取到的数据不完整的问题。(这与stdin默认为tty这样的字节设备的特性有关)
假设是a进程创建了b进程,那么a进程就是b进程的父进程。...IceSworld,Process Explorer等) 查看时,会发现提权的进程的父进程是创建它的进程,这是由于AIS利用了CreateProcessAsUser() API中的一个新的功能,这里的新功能就是将提权进程的父进程设置成创建该进程的进程...,假设我们利用一下该API,我们就能够将自己的进程的的父进程设置为随意进程(要提权绕过UAC的鸽子注意了),假设把木马进程的父进程设置为 杀软 的ID或者csrss.exe ,notepad.exe 等可信进程...就能能设置这个被创建进程的父进程,这里也仿照黑防上贴下部分代码: DWORD pid = 0; /* 依据进程名获取随意进程Id */ GetProcessIdByName(L"explorer.exe...假设你调试的程序检測父进程,直接用以上的办法启动它,当然父进程就是他检測同意的父进程喽, 这里启动时要注意的是设置CREATE_SUSPEND 就是创建挂起,然后在创建后使用ResumeThread恢复就能够顺利调试了
查询指定路径下的进程: ps aux | grep 指定路径 实例: ps aux | grep /data/nccode/ncc2020.05_for_ylz/ 根据进程 id 杀掉指定进程...kill -9 指定进程号 实例: kill -9 640582 案例: 我再该路径下起了一个服务,我要干掉我起的这个服务。...一般的进程信息里都会显示进程启用的路径,ps aux 是查看进程,grep 就是在前面的基础上再筛选查找包含指定内容的进程。...然后杀掉,再查一下可以看到没了,如果之前进程卡死了,这样就解决了,重新起进程就好了。
1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...新进程为子进程,而原进程为父进程 #include pid_t fork(void); 返回值:自进程中返回0,父进程返回子进程id,出错返回-1 进程调用fork,当控制转移到内核中的...); 返回值: 当正常返回的时候waitpid返回收集到的子进程的进程ID; 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0; 如果调用中出错,则返回-...Pid>0.等待其进程ID与pid相等的子进程。 status: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...(查看进程的退出码) options: WNOHANG: 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若正常结束,则返回该子进 程的ID。
如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态 僵尸状态就是Linux状态中的X死亡状态!...,当子进程退出,父进程没有回收退出信息时,子进程会进入僵尸状态 1.4 僵尸进程的危害 僵尸进程危害 进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!
本篇主要内容: 操作系统中的进程状态 Linux下的进程状态 在开始之前,我们先来简单了解以下进程状态 进程的本质就是PCB中的一个变量!!! 所谓状态变化,本质就是修改整形变量!!!...Linux下的进程状态 下面是一段库中找的状态的定义: static const char * const task_state_array[] = { "R (running)", /* 0 */ "..."T (stopped)", /* 4 */ "t (tracing stop)", /* 8 */ "X (dead)", /* 16 */ "Z (zombie)", /* 32 */ }; Linux...此时,恰好系统内的内存资源已经严重不足了,系统压力太大,Linux在是在没办法时候,会通过杀掉进程,节省资源的,来不及进程反应直接被系统 “干掉” 。...总结 在了解Linux中进程的分类时,我们通常是先了解操作系统的进程,因为二者有一定的联系,了解操作系统能更好理解进程在操作系统中的运行关系。进程状态在进程中也极为重要,希望大家能理解透彻!
前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。...Linux进程学习基础 本篇主要内容: 进程的概念 通过系统调用获取进程标示符 1....: 指令:kill -9 进程id 注意:这里的-9是信号参数,后面会提到,现在直接使用即可 使用指令能直接杀死进程 以上说明我们所有运行的指令,软件,自己写的可执行程序都是进程!...而这PPID就是父进程 我们依然可以用函数来查看父进程: 函数:getppid 因此我们可以知道这两个函数: 当我们不断地启动结束进程时,PID每一次的数据都不一样,但是PPID却不会改变...,让我们来查看一下父进程信息 如果我们直接杀死父进程bash,那么我们的shell会直接挂掉 3.
,通知进程id是pid的父进程 static void tell_father(int pid) { int i; if (pid) for (i=0;ifather == current->pid) { // 子进程的新父进程是进程id为1的进程...= -1) { // 不等于-1说明是等待某一个组的,但不是当前进程的组,组id是-pid的组,不是该组则跳过 if ((*p)->pgrp !...linux通过下面函数建立一个会话。...id,因为会话是进程组的集合, 所以当前进程的组id也需要更新,否则进程在其他组,但是其他组又不属于当前的会话,矛盾 */ current->session = current
⭐进程创建 fork函数初识 在Linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。...#include pid_t fork(void); 返回值:自进程中返回0,父进程返回子进程id,出错返回-1 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数据结构给子进程...⭐进程等待 进程等待的必要性 在Linux进程提到过,子进程退出,父进程如果不管不顾,不读取子进程的退出信息,就可能造成“僵尸进程”的问题,进而造成内存泄漏。..., int options); 返回值: 当正常返回的时候waitpid返回收集到的子进程的进程ID; 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集...Pid>0.等待其进程ID与pid相等的子进程。 status: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。
前言:在讲完环境变量后,相信大家对Linux有更进一步的认识,而Linux进程概念到这也快接近尾声了,现在我们了解Linux进程中的地址空间!...= fork(); 11 if(id == 0) 12 { 13 // 子进程 14 int cnt = 5; 15 while...} 24 cnt--; 25 } 26 27 } 28 else{ 29 // 父进程...因为我们之前讲过子进程按照父进程为模版,父子并没有对变量进行进行任何修改 但是在达到一定条件之后,父子进程,输出地址是一致的,但是变量内容不一样! 但是相同的地址为什么会有不同的值?...结束进程地址空间,我们的Linux进程概念到这里也结束了,后面我将带大家走进进程控制。 谢谢大家支持本篇到这里就结束了
领取专属 10元无门槛券
手把手带您无忧上云