php 中的信号处理操作实例详解
本文实例讲述了php中的信号处理操作。分享给大家供大家参考,具体如下:
首先我们需要了解几个函数
pcntl_signal 安装信号处理器,也就是当指定信号发生时,调用函数。
pcntl_alarm 指定秒数后向进程发送SIGALRM信号。
posix_getpid返回当前进程id
posix_kill 给指定进程发送信号
一些常用的信号说明
SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出,通常是在终端的控制进程结束时,
通知同一session内的各个作业,这时它们与控制终端不再关联。
SIGINT
程序终止(interrupt)信号,在用户键入INTR字符(通常是Ctrl-C)时发出。
SIGQUIT
和SIGINT类似,但由QUIT字符(通常是Ctrl-/)来控制;进程在因收到SIGQUIT退出时会产生core文件,
在这个意义上类似于一个程序错误信号。
SIGKILL
用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。
SIGTERM
程序结束(terminate)信号,与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,
shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
SIGUSR1
留给用户使用
SIGUSR2
留给用户使用
SIGALRM
时钟定时信号,计算的是实际的时间或时钟时间。alarm函数使用该信号。
SIGCHLD
子进程结束时,父进程会收到这个信号。
例1:
当子进程退出时,会向父进程发送SIGCHLD信号,我们通过设置信号处理器,成功的处理信号。
例2:
父进程等待子进程的退出,子进程等待3秒后输出child,再等待3秒后向自身发送结束程序信号。
例3:
父进程在等待30秒后,向子进程发送SIGTERM结束程序信号。如果我们设置了SIGTERM信号的处理器,并且在自定义信号处理器中并没有杀死该进程,则该子进程会一直运行下去。
pcntl_signal()函数仅仅是注册信号和它的处理方法,真正接收到信号并调用其处理方法的是pcntl_signal_dispatch()函数。
例4:
通过函数pcntl_alarm()3秒后给进程发送SIGALRM信号,但信号处理函数并未调用。
原因是我们注释了declare(ticks=1);这段代码,而又没有调用pcntl_signal_dispatch()函数。declare(ticks=1);表示每执行一条低级指令,就检查一次信号,如果检测到注册的信号,就调用其信号处理器。但是这种处理方式效率很低,建议在代码循环中通过pcntl_signal_dispatch()来处理信号。
pcntl_signal_dispatch()这个函数是PHP5.3以上才支持的,如果你的PHP版本大于5.3,建议使用这个方法调用信号处理器。
5.3以下的版本需要在注册信号之前加上:declare(ticks=1);更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。