我們常用的訊號
kill sigterm sigkill【kill命令】
ctrl+c sigint【鍵盤發出】
reload sinhub【一般從終端發出】
ctrl+z sigstop 【鍵盤發出】
定時器 sigalarm【一個程式只能有一個定時時間,多的會被新值覆蓋】
sigkill和sinstop 在進行訊號處理時,不能被忽略,(處理訊號可以有忽略,執行預設 執行使用者指定處理)
php訊號小例子
<?php
function sighandler($signo){
echo 'just for sigint',"\n";
}
function sighandler2($signo){
echo 'just for sigquit',"\n";
}
declare(ticks=1);
pcntl_signal(SIGINT,"sighandler");
pcntl_signal(SIGQUIT,"sighandler2");
for($i=1;$i<30;$i++){
file_put_contents('/home/tbtest/out.txt',"$i"."秒\n");
sleep(1);
}
~
執行結果
root@lyh:/home/tbtest# php sigint.php
^Cjust for sigint
^Cjust for sigint
^Cjust for sigint
just for sigquit
^Cjust for sigint
^Cjust for sigint
^Z
[1]+ Stopped php sigint.php
root@lyh:/home/tbtest# bg
[1]+ php sigint.php &
root@lyh:/home/tbtest# fg
php sigint.php
root@lyh:/home/tbtest# cat out.txt
29秒
root@lyh:/home/tbtest#
關於捕捉sigquit
上面捕捉到了jsut for sigquit 是因為我另外起了一個終端,
root@lyh:~# ps -aux |grep php
root 16385 0.5 1.9 377720 19468 pts/2 S+ 15:09 0:00 php sigint.php
root 16390 0.0 0.0 11744 932 pts/0 S+ 15:09 0:00 grep --color=auto php
root@lyh:~# kill -s sigquit 16385
傳送門
ps:pcntl_signal_dispatch 比ticks效率會更高