首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux进程概念(二.查看进程进程进程进程状态详解)

PID关系: 进程PID(进程标识符)是由进程调用fork()或类似系统调用创建进程PPID(进程标识符)与创建它进程PID相同。...资源继承进程继承进程大部分属性和资源,包括内存映像、文件描述符、信号处理器等。 进程在创建时拥有进程副本,但在其生命周期中可以独立修改这些副本。...在Unix/Linux系统中,可以使用 getpid() 系统调用来获取当前进程PID,使用 getppid() 系统调用来获取当前进程进程PID。...下面是对这两个返回值解释: 给进程返回进程 PID:在进程中,fork 返回新创建进程进程 ID(PID),这个 PID 是进程标识符,进程通过这个 PID 可以识别并操作进程。...这是因为在 Unix-like 系统中,进程是通过复制进程地址空间而创建,因此进程从父进程继承了大部分内存布局和数据。

2000

探索进程进程

先来认识一下fork函数: fork函数会以调用该函数进程作为进程创建一个进程 创建成功时,会在进程中返回进程PID,在进程中返回0;如果失败,在进程中返回-1,没有进程创建。...一个进程可以创建多个子进程,为了区分这些进程,fork函数在创建进程后,会给进程返回进程pid。进程只需调用getppid()函数即可找到进程。...**为什么说进程进程代码和数据是共享?**刚刚谈到,进程创建了属于自己PCB对象,但是没有代码和数据,因此它只能使用进程代码和数据,也就是说父子进程代码和数据是共享。...所以进程要把进程数据单独拷贝一份,这个过程是由操作系统来完成。...进程可以把进程数据全被拷贝一份,但是大部分数据对于进程来说可能都是没用,这就造成了浪费,所以操作系统只是把进程中数据层面的代码临时拷贝一份给进程,即进程创建后,会共享进程代码和数据,

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

进程退出时如何确保进程退出?

前言 进程退出时候,进程能够收到进程退出信号,便于管理,但是有时候又需要在进程退出时候,进程也退出,该怎么办呢? 进程退出时,进程会如何?...另外还可以观察到,该进程也是其他系统进程进程。 如何确保进程退出同时,进程也退出? 既然如此,如何确保进程退出同时,进程也退出呢?...内容很多,主要意思为:设置一个信号,当进程退出时候,进程将会收到该信号。 那么根据这个,我们完全可以在进程退出时,也给进程一个退出信号。...总结 有些情况下,我们常常需要父子进程共存亡,进程退出时,进程可以通过wait捕捉进程退出状态,但是进程退出时,进程却难以得知。...因此,在最初fork进程时候,便表明了,当进程退出时候,进程收到SIGKILL信号,最终也退出。以此达到同生共死目的。

11.5K21

关于进程进程关系(UAC 绕过思路)

假设是a进程创建了b进程,那么a进程就是b进程进程。...IceSworld,Process Explorer等) 查看时,会发现提权进程进程是创建它进程,这是由于AIS利用了CreateProcessAsUser() API中一个新功能,这里新功能就是将提权进程进程设置成创建该进程进程...,假设我们利用一下该API,我们就能够将自己进程进程设置为随意进程(要提权绕过UAC鸽子注意了),假设把木马进程进程设置为 杀软 ID或者csrss.exe ,notepad.exe 等可信进程...假设你调试程序检測进程,直接用以上办法启动它,当然进程就是他检測同意进程喽, 这里启动时要注意是设置CREATE_SUSPEND 就是创建挂起,然后在创建后使用ResumeThread恢复就能够顺利调试了...所以说进程进程不一定是进程创建者,所以那一群依据进程来看进程是否可信杀软就呵呵了。 可是这里说下 360 这个绕只是,原因是啥哪? 记得我开篇时说过道高一尺,魔高一丈吗?

1.5K30

Linux系统进程编程之回收进程(三)

那么说了这么多,我们该怎么样来回收Linux系统僵尸进程呢?...wstatus用来返回进程结束时状态,进程通过wait得到wstatus后就可以知道子进程一些结束状态信息。...返回值是进程ID,当前进程有可能有多个子进程,wait函数阻塞直到其中一个进程结束wait就会返回,wait返回值就可以用来判断到底是哪一个进程本次被回收了: wait(): on success...二、第二招:发送SIGCHILD信号: 1、我们还可以发送SIGCHILD信号来防止产生僵尸进程,当进程退出时向进程发送SIGCHILD信号,进程处理SIGCHILD信号,然后用上面信号处理函数中调用...此时如果进程执行waitpid时进程已经先结束等待回收则waitpid直接回收成功,返回值是回收进程PID; 如果进程waitpid时进程尚未结束则进程立刻返回(非阻塞),但是返回值为

3.2K20

进程欺骗实践

文章前言 监控进程进程之间关系是威胁检测团队检测恶意活动常用技术,例如,如果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

1.4K20

Linux进程为何要苦苦地知道子进程死亡原因?

白发人送黑发人 一个普遍常识是,在Linux里面总是“白发人送黑发人”,进程死亡,进程透过wait()等待进程死亡,并清理进程僵尸,当然进程也可以因此而获得进程死亡原因。...上述代码中,进程在第18行通过pause()等待信号,进程在代码第22行通过waitpid()等待进程结束。其中参数status是一个输出参数,可以获得进程死亡原因。...则进程探测到进程死亡后,可打印它退出状态: $ ....这一点从内核源代码里面也可以看出来: ? 在wait_task_zombie()中,进程会透过进程僵尸分析获得进程exit_code组合,并进一步拼装status。...事出必有因 那么,进程为什么必须知道子进程死亡呢?进程为什么一定要苦苦地知道子进程死亡原因?

2K20

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

它是我们启动进程时,控制进程启动方式参数。...SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; // 新创建进程继承管道读写句柄...我们之后将hWrite交给我们创建进程,让它去将信息写入管道。而我们进程,则使用hRead去读取进程写入管道内容。...此处要注意就是将SECURITY_ATTRIBUTES对象bInheritHandle设置为TRUE,这样我们获取两个操作管道句柄就有可继承属性。...也就是说,我们设置这些句柄要有可继承性。这就解释了我们之前为什么在创建管道时要将句柄可继承性设置为TRUE原因。         一般来说,我们要代理程序已经输入好信息了。

3.7K10

Nodejs进程

默认情况下, stdin、 stdout 和 stderr 管道会在 Node.js 进程和衍生进程之间建立,这些管道容量是有限。...child_process.fork(): 衍生新 Node.js 进程,并调用指定模块,该模块已建立了 IPC 通信通道,可以在进程进程之间发送消息。...cluster cluster模块是基于child_process.fork方法创建,它可以使用IPC和进程进行通信。...process.pid} is running`) for( let i = 0; i < numsCPUS.length; i++) { cluster.fork() // fork出来进程拥有和进程一致...master进程创建一个socket,并绑定监听到该目标端口,通过与进程之间建立IPC通道,调用进程send方法,将socket(链接句柄)传递给进程,大致实现如下。

1.3K20

C语言Linux系统编程-等待终止进程(僵死进程

1.等待终止进程(僵死进程): 如果一个进程进程之前结束,内核会把子进程设置为一个特殊状态,处于这种状态进程称为僵死进程进程获取了进程信息后,进程才会消失。...pid_t wait(int *status); 进程调用这个方法会被阻塞住,如果子进程终止时候,此方法会调用并且返回终止进程pid #include #include <unistd.h...,pid=%d , ppid=%d ,我新建进程pid=%d\n",pid,ppid,ret); int status; int sonPid...,pid=22315 , ppid=12479 ,我新建进程pid=22316 我是进程,pid=22316 , ppid=22315 我进程,pid=22316,终止了 2.如果进程进程之前终止了...,那么系统会把子进程设置给init进程(pid为1),init进程会周期性等待所有的进程,确保没有长时间僵死进程

3.4K20

Fork进程后,是否与进程共享stdio?

今天想到一个问题:如果我在代码里面,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这样字节设备特性有关)

13420

L010Linux和androidNDK之linux避免僵尸进程进程退出处理

L010Linux和androidNDK之linux避免僵尸进程进程退出处理 如果你在程序中fork出一个进程,没有好好处理进程退出后相关事宜,那么就有可能召唤出传说中进程僵尸---僵尸进程...如果他进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时进程结束了,那么init进程自动会接手这个子进程,...异步回收僵尸进程: fork()之后,进程从父进程获取了一份拷贝,和进程分别独立运行,僵尸进程产生是因为进程没有给进程“收尸”造成,又可以根据危害程度分为下述两类: 总体来说:当进程结束之后...,但进程未结束之前,进程将成为僵尸进程。...(1)当进程结束之后,但进程未结束之前,进程将成为僵尸进程进程结束后僵尸被init进程回收。

3.1K40

Windows内核之进程终止和进程

它做事情: 全部打开句柄被关闭 全部线程会被终止 进程对象状态变为终止,满足全部等待进程结束线程 进程中全部线程对象状态变为终止,满足全部等待线程结束线程 ...进程终止状态由STILL_ACTIVE变为了进程返回代码 这个函数是异步,它告诉操作系统,你要终止某个进程,可是当函数返回时候,你无法保证进程是否已经被杀死,假设想要确切知道进程是否被杀死...2 进程终止时情况 进程中全部剩余线程将被终止 进程中指定用户对象,GDI对象被释放,内核对象被关闭 内核对象状态编程收到通知状态 进程退出代码由STILL_ACTIVE...3 进程 程序中要实现一段功能一共同拥有3种方法: 调用函数 开辟新线程 开辟新进程 3.1 调用函数 调用函数时很常见,可是它缺点是由于在同一个线程中...3.3 开辟进程 这样有点是既能够保护数据,能够同步运行,也能够等待新进程运行完成再去运行其它进程代码。缺点是开辟新进程,会造成地址空间浪费。

1.6K20

linux通过进程名杀死进程_linux关闭进程命令

笔记:根据一个进程名字或启动此进程命令(连续一部分即可)杀死进程 一、使用单条命令 ps -ef | grep 进程名/启动进程命令 | grep -v grep | awk ‘{print $2...}’ | xargs kill -9 执行结果: [1]-  已杀死               sleep 200 [2]+  已杀死               sleep 200 二、编写脚本 linux.../bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9     # 1通过ps查询进程id     # 2使用kill -9 强制终止进程...请使用此方式运行:/bin/bash kill_process.sh 进程名”     exit 1 fi # 获取要被杀死进程名 pName=$1 <<!    ...————————————————————— # 根据进程名查询包含进程进程 并排除grep查询进程和此脚本进程 ps -ef | grep “$pName” | grep -v grep | grep

15.8K20

wait() 回收进程

在前面的文章中我们讨论了如何通过 fork() 函数创建进程,创建后进程如果优先于进程退出,进程虚拟内存空间就消失了,但是进程控制块PCB并没有消失,这里面包含了这个子进程退出状态,需要由进程来进行回收...在进程回收之前,这个进程被称为僵尸进程(僵死进程),任何一个进程都会经过这段僵尸进程阶段,最后由进程来回收。...5秒 sleep(5); } else if (pid > 0) { // 进程调用wait函数处于阻塞状态,直到进程结束wait才会返回...wait() 应用了,这样 wait() 只起到了回收进程 PCB 作用,而并没有对子进程退出消息做任何接收或处理。...而WIFSIGNALED则是判断进程是否是接收到了某个信号,如果是收到了某个信号证明进程是非正常退出,那么使用WTERMSIG获取收到信号。可通过 kill -l 查看信号编号对应内容。

17430
领券