什么是僵尸进程?首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息。这些 信息至少包括进程ID,进程的终止状态,以及该进程使用的CPU时间,所以当终止子进程的父进程调用wait或waitpid时就可以得到这些信息。而僵...
分类:
系统相关 时间:
2015-05-14 18:27:56
阅读次数:
160
linux应用开发-信号编程
一 信号用于进程间通信
信号定义在/usr/include/asm/signal.h下
常见的信号有:
SIGKILL杀死进程
SIGSTOP暂停进程
SIGCHLD子进程停止或者结束时通知父进程
二 相关的函数
发送信号
函数名 kill
函数原形 int kill(pid_t pi...
分类:
系统相关 时间:
2015-05-05 21:48:39
阅读次数:
174
1、捕获子进程退出(监听SIGCHLD信号,然后调用 pcntl_wait 函数)declare(ticks=1);pcntl_signal(SIGCHLD, "sig_handler");function sig_handler($signo){ switch ($signo) { ...
分类:
Web程序 时间:
2015-05-04 01:14:32
阅读次数:
218
1.核心理论
信号类型:linux系统支持的所有信号均定义在/usr/include/asm/signal.h中,其中常见的信号有:
SIGKILL: 杀死进程
SIGSTOP: 暂停进程
SIGCHLD:子进程停止或结束时用来通知父进程
2.函数学习
发送信号
函数名:kill
函数原型:int kill(pid_t pid, int sig);
函数功能:向进程发送信号
...
分类:
其他好文 时间:
2015-04-24 09:13:48
阅读次数:
152
1. 信号概念 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件)。信号是硬件中断的软件模拟(软中断)。每个信号用一个整型常量宏表示,以SIG开头,比如SIGCHLD、SIGINT等,它们在系统头文件中定义,也可以通过在shell下键入kill –l查看信号列表,或者键入man 7 ...
分类:
其他好文 时间:
2015-04-23 01:56:43
阅读次数:
183
5 wait和waitpid函数 当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。5.1调用wait或waitpid的进程可能会: 阻塞(如果其子进程都还在运行) 带子进程的终止状态立即返回 出错立即返回5.2wait和waitpid的区别: 在一个子...
分类:
系统相关 时间:
2015-04-20 11:03:28
阅读次数:
192
一个僵尸进程产生的过程是:父进程调用fork创建子进程后,子进程运行至其终止。进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号、进程的退出状态、进程运行的CPU时间等。因此进程运行终止后,系统会回收所有内核分配给它的内存、关闭它所打开的文件等,但是还会保留以上极少的信息,以供父进程使用,系统会向父进程发送SIGCHLD信号,父进程应及时调用wait函数来为子进程收尸,做一些收尾工作...
分类:
编程语言 时间:
2015-04-20 09:25:58
阅读次数:
193
1、wait和waitpid出现的原因SIGCHLDq 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止)q 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退...
分类:
系统相关 时间:
2015-04-16 17:15:17
阅读次数:
163
linux下进程终止时,内核会向父进程发送一个SIGCHLD信号,其有几个特点: 1.在一个信号处理函数运行期间,正被递交的信号是阻塞的。 2.如果一个信号在被阻塞期间产生了一次或多次,那么该信号被解阻塞之后通常只递...
分类:
其他好文 时间:
2015-04-03 00:22:33
阅读次数:
354
1.如下代码所示#include #include #include int main(int argc,char *argv[]){ pid_t child = fork(); if( child == -1 ) { //error pri...
分类:
系统相关 时间:
2015-04-01 16:56:56
阅读次数:
189