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

Linux wait() 和 waitpid()函数介绍

Waitpid函数。 当我们需要等待一个特定进程的函数时候,我们这个时候就需要用到了waitpid函数了。从上文看到waitpid函数原型,我们也都了解到有个pid_t参数。...Waitpid返回终止子进程的进程ID。并将该子进程的终止状态存放在有status指向的存储单元中。 Waitpid 函数提供了wait函数没有提供的三个功能。...Waitpid可等待一个特定的进程,而wait则返回任一个终止子进程的状态。 Waitpid提供了yigewait费阻塞版本。有时候用户希望取得一个子进程的状态,但不想阻塞。...Waitpid支持作业控制。...Waitpid返回值和错误 waitpid的返回值比wait稍微复杂一些,一共有3种情况: 当正常返回的时候,waitpid返回收集到的子进程的进程ID; 如果设置了选项WNOHANG,而调用中waitpid

2.2K50

进程 (一).fork(2)

如果成功就返回子进程的进程ID给父进程,返回0给子进程,出错就返回-1 区别是在内存中vfork是进行COW(写时复制)的,fork是全部拷贝,因此vfork速度会更快,更省空间 ---- wait,waitpid...(__pid_t __pid, int *__stat_loc, int __options); 从上面的描述可以知道 wait(&status) 相当于 waitpid(-1,&status,0)...实际上Linux 内部在实现wait函数时直接调用的就是waitpid函数 status 是用来存放返回值的,一般不是直接使用,而是通过宏来进行解析,例如 WEXITSTATUS(status) 在 stdlib.h..._WAIT_INT (status)) # define WIFSTOPPED(status) __WIFSTOPPED (__WAIT_INT (status)) ---- WNOHANG linux.../wait.h #ifndef _LINUX_WAIT_H #define _LINUX_WAIT_H #define WNOHANG 0x00000001 #define WUNTRACED

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

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

那么说了这么多,我们该怎么样来回收Linux系统的僵尸进程呢?...来,让我们下面细说: 一、第一招:使用wait()函数来回收: 1、我们先来看这个函数的原型和它所包含的头文件(在Linux系统下,使用man 手册来查看它的具体用法:man 2 wait):...signal() varies across UNIX versions, and has also varied historically across different versions of Linux...此时如果父进程执行waitpid时子进程已经先结束等待回收则waitpid直接回收成功,返回值是回收的子进程的PID; 如果父进程waitpid时子进程尚未结束则父进程立刻返回(非阻塞),但是返回值为...上面的源代码链接:https://github.com/1121518wo/linux-/tree/master

3.2K20

Linux】进程控制(创建、终止、等待)

环境:centos7.6,腾讯云服务器 Linux文章都放在了专栏:【Linux】欢迎支持订阅 相关文章推荐: 【Linux】冯.诺依曼体系结构与操作系统 【Linux】进程理解与学习Ⅰ-进程概念...【Linux】进程理解与学习Ⅱ-进程状态 【Linux】进程理解与学习Ⅲ-环境变量 【Linux】进程理解与学习Ⅳ-进程地址空间 浅谈Linux下的shell--BASH 【Linux】进程优先级...实际上系统提供了函数,wait与waitpid函数。...阻塞式等待 将waitpid的第三个参数设置为0,就表示阻塞式等待。...所谓非阻塞式等待,就是父进程在执行waitpid指令时,假如子进程没有退出,则会给waitpid返回一个0,然后继续执行后面的指令。

3.4K40

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

L010Linux和androidNDK之linux避免僵尸进程,子进程退出的处理 如果你在程序中fork出一个子进程,没有好好处理子进程退出后的相关事宜,那么就有可能召唤出传说中进程界的僵尸---僵尸进程...僵尸进程销毁, 而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是 使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁) 僵尸进程是怎么样产生 在Linux...如果他的父进程没安装SIGCHLD信号处理函数调用wait或waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时父进程结束了,那么init进程自动会接手这个子进程,...); pid_t wait (int * status); 其中 wait(&status);等价于waitpid(-1, &status, 0); waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束...如果在调用 waitpid()时子进程已经结束,则 waitpid()会立即 返回子进程结束状态值。

3.1K40

为什么你的docker容器刚启动就停了

这个要从linux内核说起 在linux操作系统中,当内核初始化完毕之后,会启动一个init进程,这个进程是整个操作系统的第一个用户进程,所以它的进程ID为1,也就是我们常说的PID1进程,然后所有的用户态进程...这是因为在某些程序中,我们必须明确地知道进程的退出状态等信息,而这些信息的获取是由父进程调用wait/waitpid而获取的。...:进程退出后,到其父进程还未对其调用wait/waitpid之间的这段时间所处的状态。...但是,一些粗心的程序员可能会忘记调用wait/waitpid,或者由于某种原因未执行该调用等等,那么这个时候就会出现长期驻留的僵尸进程了。...了解了linux的PID1,接着来看下容器中的PID1进程 熟悉docker都知道,docker容器并不是一个完整的linux的操作系统,它也没什么内核初始化过程,更没有像init(1)这样的初始化过程

2.5K10

Linux】进程控制

4、shell 的最终实现 一、进程创建 1、再谈 fork 函数 我们在 进程概念与进程状态 中对 fork 函数进行了初步的介绍与使用,在这里我们来详细的学习一下 fork 函数;fork 是 Linux...系统调用 我们也可以用 waitpid 来进行进程等待: 头文件:sys/types.h sys/wait.h 函数原型:pid_t waitpid(pid_t pid, int *status...调用成功时返回被等待进程的pid;如果设置了WNOHANG,且waitpid发现没有已退出的子进程可收集,则返回0;调用失败则返回-1; 我们还是举例来说明 waitpid 的使用: #include...waitpid 函数时,如果子进程还没有退出,父进程就只能阻塞在 waitpid 函数,直到子进程退出,父进程通过 waitpid 读取退出信息后才能接着执行后面的语句; 而非阻塞式等待则不同,...指令 “ls” 为例,我们知道,ls 是Linux中 “/usr/bin” 目录下的一个可执行程序,且该程序处于PATH环境变量中,那么如果我们要替换此程序,exec 函数的第一个参数如下: execl

4K00

如何查看并杀死僵尸进程

在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程....在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程...如何查看linux系统上的僵尸进程,如何统计有多少僵尸进程? #ps -ef | grep defunct 或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思。...另外子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。...在Linux下 可以简单地将 SIGCHLD信号的操作设为SIG_IGN。 signal(SIGCHLD,SIG_IGN); 这样,内核在子进程结束时不会产生僵尸进程。

4.6K10

进程详解(1)——可能是最深入浅出的进程学习笔记

每个进程的task_struct和系统空间堆栈存放位置如下:两个连续的物理页【《Linux内核源代码情景分析》271页】 ?...函数 wait用于使父进程阻塞,等待子进程退出;waitpid有若干选项,如可以提供一个非阻塞版本的wait,也能实现和wait相同的功能,实际上,linux中wait的实现也是通过调用waitpid实现的...linux中命令ps,标记为Z的进程就是僵尸进程。...ps -aux 找到对应PID kill -9 PID 其他参考资料: 《APUE》 《操作系统》清华大学公开课 向勇、陈渝 《嵌入式Linux应用程序开发详解》 《LInux 的僵尸(zombie)...进程》http://coolshell.cn/articles/656.html 《Linux下僵尸进程的处理》http://www.mike.org.cn/articles/treatment-of-zombie-processes-under-linux

46030

Linux操作系统编程》 第六章 Linux中的进程监控: fork函数的使用,以及父子进程间的关系,掌握exec系列函数

第六章 Linux中的进程监控 学习目的 使学生理解Linux中进程控制块的数据结构,Linux进程的创建、执行、终止、等待以及监控方法。并重点掌握fork函数的使用以及exec系列函数。...函数 ▪ 功能:等待某个特定子进程状态改变 ▪ 函数原型 - 头文件:sys/wait.h - pid_t waitpid(pid_t pid, int *statloc, int options);...特有的功能 - waitpid可等待一个特定的进程的状态改变信息 - waitpid可以实现非阻塞的等待操作,有时希望取得子进程的状态改变信息,但不希望阻塞父进程等待子进程状态改变 - waitpid支持作业控制...(进程组控制) (3) 获知子进程状态改变 ▪ 主动获取 - 调用wait或waitpid函数等待子进程状态信息改变,并获取其状态信息 ▪ 异步通知 - 当一个进程发生特定的状态变化(进程终止、暂停以及恢复...waitpid函数的pid参数怎样设置表示等待任一子进程终止? 答:pid设置为 -1代表等待任意子进程状态改变(同wait)。 4.在Linux中什么情况下使用exec函数簇?

11710

一种Linux下ptrace隐藏注入shellcode技术和防御方法

本文介绍一种Linux下使用ptrace隐藏注入shellcode的技术和防御方法。...二、背景 不同版本操作系统有各自实现ptrace系统调用的方式,本文只关注Linux环境,因此先简单说明Linux下ptrace系统调用的用法。...tracee状态变成STOP,waitpid返回; 3) tracer调用PTRACE_SYSCALL功能让tracee进入单步执行状态,并调用waitpid等待tracee状态改变; 4) 重复步骤2...解决第一个问题,需要了解Linux进程的内存结构,如图2所示。...【图4 Linux内核ptrace访问模式检查算法】 除了在同一个线程组的情况,获得使用ptrace功能的许可必然经过Linux安全模块(LSM)的检查,因此可以配置LSM限制ptrace功能,以Yama

1K20
领券