php程序間通訊 訊號

2021-09-02 01:13:08 字數 2373 閱讀 9374

php程序間通訊的另外乙個手段就是通過 訊號 來在程序間傳遞資訊。訊號是一種系統呼叫。通常我們用的kill命令就是傳送某個訊號給某個程序的。具體有哪些訊號可以在liunx/mac中執行kill -l檢視。

一些php訊號的意思如下:

sighup

終止程序     終端線路結束通話

sigint

終止程序     中斷程序

sigquit

建立core檔案終止程序,並且生成core檔案

sigill

建立core檔案       非法指令

sigtrap

建立core檔案       跟蹤自陷

sigbus

建立core檔案       匯流排錯誤

sigsegv

建立core檔案        段非法錯誤

sigfpe

建立core檔案       浮點異常

sigiot

建立core檔案        執行i/o自陷

sigkill

終止程序     殺死程序

sigpipe

終止程序      向乙個沒有讀程序的管道寫資料

sigalarm

終止程序     計時器到時

sigterm

終止程序      軟體終止訊號

sigstop

停止程序     非終端來的停止訊號

sigtstp

停止程序      終端來的停止訊號

sigcont

忽略訊號     繼續執行乙個停止的程序

sigurg

忽略訊號      i/o緊急訊號

sigio

忽略訊號     描述符上可以進行i/o

sigchld

忽略訊號      當子程序停止或退出時通知父程序

sigttou

停止程序     後台程序寫終端

sigttin

停止程序      後台程序讀終端

sigxgpu

終止程序     cpu時限超時

sigxfsz

終止程序     檔案長度過長

sigwinch

忽略訊號     視窗大小發生變化

sigprof

終止程序     統計分布圖用計時器到時      

sigusr1

終止程序     使用者定義訊號1                                     

sigusr2

終止程序     使用者定義訊號2                             

sigvtalrm

終止程序      虛擬計時器到時

下面來看乙個例子。啟動3個子程序,執行,父程序等待5秒鐘,向子程序傳送sigint訊號。子程序捕獲訊號,呼叫訊號處理函式處理。

<?php

$parentpid = posix_getpid();

echo "parent progress pid:\n";

// 定義乙個訊號處理函式

function sighandler($signo) progress,oh no ,i'm killed!\n");

}}//php < 5.3 使用

//配合pcntl_signal使用,表示每執行一條低階指令,就檢查一次訊號,如果檢測到註冊的訊號,就呼叫其訊號處理器。

//declare(ticks=1);

pcntl_signal( sigint, 'sighandler'); //註冊訊號處理函式

$childlist = ;

for( $i = 0; $i < 3; $i++ )

}else if( $pid == -1 )else

}sleep(5);

foreach( $childlist as $key=>$vo )

sleep(2);

echo "($parentpid)parent is end " . php_eol;

pcntl_signal_dispatch ( void )  

呼叫每個等待訊號通過pcntl_signal() 安裝的處理器。說明一下:pcntl_signal()函式僅僅是註冊訊號和它的處理方法,真正接收到訊號並呼叫其處理方法的是pcntl_signal_dispatch()函式必須在迴圈裡呼叫,為了檢測是否有新的訊號等待dispatching。

pcntl_signal_dispatch()這個函式是php5.3以上才支援的,如果你的php版本大於5.3,建議使用這個方法呼叫訊號處理器。5.3以下的版本需要在註冊訊號之前加一句:declare(ticks = 1);表示每執行一條低階指令,就檢查一次訊號,如果檢測到註冊的訊號,就呼叫其訊號處理器。

程序間通訊 訊號

關於訊號在程序間的通訊,這是乙個比較複雜的東西,本人不在這裡做過多的介紹.如果想系統的學習,請參考 unix環境高階程式設計這本書 我在這裡只展示幾個例子 用守護程序實現檔案的同步.由子程序1改乙個檔案,守護程序2,檢查到檔案已經改變,並通過訊號告訴給父程序,父程序實現輸出.程式有點複雜,但思路還是...

程序間通訊(訊號)

linux系統程序間通訊有很多種方式 較多使用的有訊號,管道以及system vipc。各種通訊方式各有優缺點。這部分主要就程序間通訊方式進行總結。1 訊號。訊號進行程序間通訊方式有一點需要明確 訊號只能通知,不能在程序間共享資料資源。也就是說訊號僅僅是告訴你一下某個事情發生了。而我們的程式則可以對...

程序間通訊 訊號

訊號 概念 訊號是在軟體層次上對中斷機制的一種模擬,它是比較複雜的通訊方式,用於通知程序有某事件發生,乙個程序收到乙個訊號與處理器收到乙個中斷請求效果上可以說是一致的。程序在接收到這個訊號以後,可以設定響應的處理動作 忽略或者呼叫函式進行處理。在linux下命令列 kill l 可以檢視linux下...