易截截图软件、单文件、免安装、纯绿色、仅160KB

linux中waitpid系统调用

对于进程的一生可以用一些形象的比喻作一个小小的总结:
随着一句fork,一个新进程呱呱落地,但它这时只是老进程的一个克隆。
然后随着exec,新进程脱胎换骨,离家独立,开始了为人民服务的职业生涯。
人有生老病死,进程也一样,它可以是自然死亡,即运行到main函数的最后一个”}”,从容地离我们而去;也可以是自杀,自杀有2种方式,一种是调用 exit函数,一种是在main函数内使用return,无论哪一种方式,它都可以留下遗书,放在返回值里保留下来;它还甚至能可被谋杀,被其它进程通过另外一些方式结束他的生命。
进程死掉以后,会留下一具僵尸,wait和waitpid充当了殓尸工,把僵尸推去火化,使其最终归于无形。
 
在linux中wait系统调用一文中介绍了其中的一个殓尸工wait, 下面介绍另一个waitpid,这个貌似复杂些。
 
waitpid函数原型:
 
#include<sys/types.h>/* 提供类型pid_t的定义 */
#include<sys/wait.h>
pid_twaitpid(pid_t pid,int* status,int options);
从本质上讲,系统调用waitpid和wait的作用是完全相同的,但waitpid多出了两个可由用户控制的参数pid和options,从而为我们编程提供了另一种更灵活的方式。下面我们就来详细介绍一下这两个参数:
 
pid
 
从参数的名字pid和类型pid_t中就可以看出,这里需要的是一个进程ID。但当pid取不同的值时,在这里有不同的意义。
 
1. pid>0时,只等待进程ID等于pid的子进程,不管其它已经有多少子进程运行结束退出了,只要指定的子进程还没有结束,waitpid就会一直等下去。
2. pid=-1时,等待任何一个子进程退出,没有任何限制,此时waitpid和wait的作用一模一样。
3. pid=0时,等待同一个进程组中的任何子进程,如果子进程已经加入了别的进程组,waitpid不会对它做任何理睬。
4. pid<-1时,等待一个指定进程组中的任何子进程,这个进程组的ID等于pid的绝对值。
 
options
 
options提供了一些额外的选项来控制waitpid,目前在Linux中只支持WNOHANG和WUNTRACED两个选项,这是两个常数,可以用”|”运算符把它们连接起来使用,比如:
 
ret=waitpid(-1,NULL,WNOHANG|WUNTRACED);
如果我们不想使用它们,也可以把options设为0,如:
 
ret=waitpid(-1,NULL,0);
如果使用了WNOHANG参数调用waitpid,即使没有子进程退出,它也会立即返回,不会像wait那样永远等下去。


相关文档:

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

在LINUX下使用 Squid 代理服务器


  使用 Squid 代理服务器
  Squid 是一种代理服务器,它实现了对 HTTP、FTP 和 Gopher 协议的缓存。Squid 能够使用访问控制列表(Access Control List,ACL)来允许或拒绝访问。Squid 具备强大的可配置能力以及鲁棒性,而且用户会发现,该软件非常容易学习。更好的是,可将 Squid 配置为透明代理,即好像用户根本不 ......

windows系统下安装linux系统(fedora12)

在公司里面一直都用到linux操作系统,而公司里面用到的是centos,我自己电脑上安装的是ubuntu,而centos一般用于服务器,对于学习linux来说有点不太使用,所以我考虑把ubuntu换成fedora,当然不是说ubuntu不好,只是想换一个版本玩玩.^_^
可是接着问题就来了,fedora是怎么都安装不上,在网上搜索了一些资料,都不太适用, ......

linux 调试工具

 “工欲善其事 必先利其器”现在将一些常见的调试工具进行一下总结.
 【1】
名称:MEMWATCH
功能:
    1、MEMWATCH 支持 ANSI C
    2、它提供结果日志纪录
    3、能检测双重释放(double-free)
    4、错误释放(erroneous f ......

LINUX内核精简

Linux自身具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中的仿真工具(ICE)的障碍。内核的完全开放使人们可以自己设计和开发出真正的硬实时系统,软实时系统在Linux中也容易得到实现。强大的网络支持使得可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号