waitpid最后以一个参数设为0_waitpid
营销树今天精心准备的是《waitpid》,下面是详解!
linux 中的waitpid函数的返回值问题
TheprocessIDofthechildwhichexited,orzeroifWNOHANGwasusedandnochildwasavailable,or-1onerror(inwhichcaseerrnoissettoanappropriatevalue).者是man中的解释,我不明白在什么情况下...
The process ID of the child which exited, or zero if WNOHANG was used
and no child was available, or -1 on error (in which case errno is set
to an appropriate value).
者是man 中的解释,我不明白在什么情况下会返回0,为什么返回0,最好给举个例子,巨大的感谢了
展开
-1 是出现错误的返回值,我就不说了。
0 只有当你的 waitpid 第三个参数包含 WNOHANG 的时候才有可能。
比如
pid = fork();
if (pid == 0) {
//child process
while(1) {
printf("aaa\n");
sleep(1);
}
} else {
// parent
option = 0;
result = waitpid(pid, NULL, option);
。。。。。
}
上面的代码,由于子进程永远不会结束(除非它被kill),父进程会一直停在 waitpid 那个系统调用,等待子进程结束 (当子进程结束后, waitpid 的返回值等于子进程 pid)。
但是如果 option=WNOHANG; 父进程不会停在 waitpid 那里, waitpid 会立刻返回 0 ,表示被等待的子进程并没有结束。
linux里面的wait和waitpid是什么?
wait和waitpid的不同在于wait会令调用者阻塞直至某个子进程终止而waitpid则可以通过设置一个选项来设置为非阻塞,另外waitpid并不是等待第一个结束的进程而是等待参数中pid指定的进程。
waitpid提供了wait所没有的三个特性:
1 waitpid使我们可以等待指定的进程
2 waitpid提供了一个无阻塞的wait
3 waitpid支持工作控制
具体可以查看APUE page202
求助,SIGCHLD和waitpid的关系
其实这两者之间没有必然的关系。
SIGCHILD只是在子进程退出的时候发送给父进程的一个信号值,这是一种异步通知父进程的方式.父进程可以捕获,忽略这个信号,忽略这个信号也是避免僵尸进程的一种方式.
waitpid or wait回收子进程的结束状态,避免子进程进入僵尸状态.
主进程可以直接调用waitpid or wait来回收子进程的结束状态,不一定非得通过SIGCHILD信号处理函数,也就是说waitpid or wait不是依靠SIGCHLD信号是否到达来判断子进程是否结束.但是如果主进程除了回收子进程状态以外还有其他的业务需要处理那么最好是通过SIGCHILD信号处理函数来调用waitpid or wait,因为这是异步的操作.
如果注册了SIGCHLD信号处理函数,那么就需要等待SIGCHLD信号的到达并且完成信号处理函数,waitpid or wait才能接受到子进程的的退出状态.
前面的3点可能很多同学都知道,但是对第4点可能没有关注过,其实以前我也没有关注过第4点,某天man system的时候看到"During execution of the command, SIGCHLD will be blocked",觉得有点不解."为什么要阻塞SIGCHLD信号呢?是不是跟waitpid有关呢?"
在system实现中会调用waitpid来回收子进程的状态,首先想到的一点是:阻塞SIGCHLD是为了避免主进程已经注册的SIGCHLD处理函数回收所有的子进程状态,那么在system中的waitpid调用会导致ECHILD(No child processes)的错误.为了证实自己的想法是否正确在网上查了一下,最后发现还跟第4点有关系,因为如果不阻塞SIGCHLD信号并且主进程注册了SIGCHLD信号处理函数,那么就需要等主进程的信号处理函数返回waitpid才能接受到子进程的退出状态,也就是如果信号处理函数需要1min才能处理完那么system也需要1min才能返回.所以在调用system函数的时候阻塞SIGCHLD,这样在执行期间信号被阻塞就不会调用信号处理函数了,system中的waitpid就能"及时"的获取到子进程的状态,然后"及时"退出.
wait和waitpid的区别
wait 英[weɪt] 美[wet]
vt. 等待; 等候; (尤指长期地) 希望; 盼望;
vi. 准备妥; 在手边; 可得到; 可使用;
vt. 推迟,搁置,延缓;
[例句]I walk to a street corner and wait for the school bus
我走到街角等校车。
[其他] 第三人称单数:waits 现在分词:waiting 过去式:waited过去分词:waited
waitpid 会暂时停止目前进程的执行,直到有信号来到或子进程结束。
关于waitpid函数的问题,为什么最后子进程没退出来
WNOHANG 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若结束,则返回该子进程的ID。 raise(SIGSTOP);只不过是让子进程暂停,并没有结束进程。所以返回值为0 还有ret=kill(result,SIGKILL)==0这句实际是这么执行的ret=(kill(r
OS.WNOHANG 是什么意思?
在交互式下执行os.WNOHANG结果是1....
在交互式下执行 os.WNOHANG 结果是1.
那是一个os模块的常量,一般在os.waitpid(-1 , os.WNOHANG)里面用
-1 表示等待所有的子进程结束,作用相当于调用wait ,WNOHANG表示不使父进程挂起,而立即返回
C语言问题 关于implicit declaration of function
我在被调用函数所在文件如1.c的头文件1.h申明了这个函数,在调用函数的文件也包含了被调用文件的1.h但是为什么还会出现implicitdeclarationoffunction隐式申明函数的警告呢...
我在被调用函数所在文件如1.c的头文件1.h申明了这个函数,在调用函数的文件也包含了被调用文件的1.h 但是为什么还会出现 implicit declaration of function 隐式申明函数的警告呢
有两种情况会产生这种警告
1 没有把函数所在的c文件生成.o目标文件
2 在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明
在linux系统下实现对system() 函数对fork() ,exec(...
不知道你这实现这些函数的调用是什么意思,是要重写这些接口吗?还是举个例子说明?
我解释一下吧:
(1)system()其实就是对fork()和exec()函数族等的封装。
(2)fork()是用来产生子进程的,是现在我知道的唯一一个返回两个值的函数(有过有另外的,麻烦网友指出),返回-1表示执行失败;否则返回大于0的值时,表示是子进程的进程号,返回0时,表示父进程创建子进程成功。
(3)exec()不是一个函数,是函数族,有execl(),execv(),execle(),execve(),execlp(),execvp(),它们常用于子进程中“脱胎换骨”,就是父进程创建子进程后,子进程几乎是父进程的拷贝(只有很少的东西不一样,如进程号(PID)等),然后子进程调用exec()函数族执行其他的程序,即将原来进程的东西全部清除掉,称为一个崭新的进程,所以叫“脱胎换骨”。
(4)waitpid()是用在父进程中等待进程退出的,如果父进程不调用这个接口,那么它有可能先于子进程退出,那么子进程就会称为孤儿进程,继而被init进程(PID为1的进程,Linux启动后第一个启动的进程)收养。或者父进程并未退出,也未调用这个接口,但是子进程已经执行完成,那么子进程就会成为一个僵尸进程。
具体例子在网上找找吧,都不是很难。
进程间通信中wait函数有什么作用
调用wait或waitpid有三种不同的情况发生:
1、如果其所有子进程都还在运行,则阻塞
2、如果一个子进程终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回
3、如果它没有任何子进程,则立即出错返回
如果进程由于接收到SIGCHLD信号而调用wait,则可期望wait会立即返回,但是如果在任意时刻调用wait,则进程可能会阻塞。
在一个子进程终止前,wait使其调用者阻塞,而waitpid有一个选项,可使调用者不阻塞。
waitpid并不等待在其调用之后的第一个终止子进程,他有若干选项,可以控制他所等待的进程。
waitpid函数提供wait函数没有提供的三个功能:
1、waitpid可等待一个特定的进程,而wait则返回任一终止子进程的状态
2、waitpid提供了一个wait的非阻塞版本
3、waitpid支持作业控制
waitpid
waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。
waitpid最后以一个参数设为0_waitpid相关推荐
- waitpid最后以一个参数设为0_wait()和waitpid()解析
wait()函数说明 wait(等待子进程中断或结束,相关函数 waitpid,fork) 表头文件 #include#include 函数原型 pid_t wait (int * status); ...
- waitpid最后以一个参数设为0_西门子MM440变频器参数设置
1.图片1.P0003为用户访问等级参数,当你无法找到你要看的参数时,不妨将其设为3试试: 2.P0004为参数过滤参数,将其设为0即可访问全部参数: 3.电机参数只有在P0010设为1时,才能更改: ...
- waitpid最后以一个参数设为0_详解wait和waitpid函数(转)
#include /* 提供类型pid_t的定义 */ #include pid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子 ...
- 一阶矩+二阶矩估计求解一个参数
一阶矩+二阶矩估计求解一个参数 @(概率论) 一般来说,一个参数对应一个方程.所以在矩估计法中,用一阶矩就可以求解一元.但是有些情况下,只写一阶矩,原理上是可以求得解的,但是,初等代数中很难剥离出来, ...
- 当db_cache_advice初始化参数设为on, 大大降低了cpu的使用
7.2.2.1 Buffer Cache Advisory Statistics A number of statistics can be used to examine buffer cache ...
- Firefox/Chrome下flash的wmode参数设为opaque或transparent时输入文本框中无法输入中文汉字的解决方法
一.前言 这段时间做个项目,要涉及到flash开发.真悲催,之前没有接触过flash开发,于是找个哥们临时教了一下Adobe Flash CS5 的使用方法,感觉还蛮简单,所见即所得,和MFC下的开发 ...
- Firefox/Chrome下flash的wmode参数设为opaque或transparent时输入文本框中无法输入中文汉字的解决方法...
这段时间做个项目,要涉及到flash开发.真悲催,之前没有接触过flash开发,于是找个哥们临时教了一下Adobe Flash CS5 的使用方法,感觉还蛮简单,所见即所得,和MFC下的开发有点像,渐 ...
- 有监督学习的算法fit(x,y)传两个参数无监督学习的算法是fit(x),即传一个参数
有监督学习的算法fit(x,y)传两个参数无监督学习的算法是fit(x),即传一个参数 https://www.jianshu.com/p/55e261ce9b3e
- esnext:最后一个参数后面也允许加逗号了
https://jeffmo.github.io/es-trailing-function-commas 目前是一个 stage 3 的提案,Chakra 和 JSC 已经实现了,它允许我们在函数定义 ...
最新文章
- poj 1679 次小生成树
- 神爱程序员,于是带来Python
- 新视频超分算法来了:CVPR 2021 NTIRE 2021 冠军
- void slove C语言什么意思,菜鸟求助-如何用指针法将一串字符按单词的倒序输出?如:i love yo...
- Editplus查找替换的正则表达式应用说明
- 关于python_关于 Python
- Centos7更新 SQLite3至版本3.29.0
- 人工智能的时代来了,新的商业机会在哪里?
- MySql主从同步最小配置
- 485串口测试工具软件_(案例)电脑和仪表之间485通讯的奇怪现象及解决方案
- 创建SpringBoot项目的两种姿势
- RMSProp均方根反向传播法
- Android模拟地图gps定位
- Reeder Web版
- Byte,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb,Bb单位换算
- python怎么暂停运行_如何让python程序暂停?
- javaweb:servlet(3)
- Office的许可证不是正版弹框解决
- 线性回归——加州房价预测
- hibernate的Query和Criteria