教你一招如何使用 php 父子程序坑人

2021-08-28 04:50:19 字數 1182 閱讀 5576

現在專案中大多都會使用mq(訊息佇列)用來解耦和提公升服務穩定性,然後都會面臨乙個問題,就是訊息積壓,解決這個問題除了提公升處理訊息的速度以外,另外就是多開些消費者程序,併發的消費資料。

如果是其他語言可以多開些執行緒或協程消費資料,但是這些東西,在 php 裡並沒有很好地支援,所以大家多採用多程序的方式來增加消費者,然後這裡又有了兩種方式,父子多程序和普通多程序。

然後這裡就有了乙個有趣的坑人方法,小小一技就能把人坑的想打你,那就是使用父子程序。

這是 php 使用父子程序的乙個偽**

$pid = pcntl_fork();

//父程序和子程序都會執行下面**

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

那麼怎麼坑人呢?

坑人第一步,監聽 signal

//使用ticks需要php 4.3.0以上版本

declare(ticks = 1);

//訊號處理函式

function sig_handler($signo)

}

只需要監聽兩個,乙個是監聽的 ctrl+c 的 sigint ,另外乙個是 kill 的預設 signal (不帶任何引數就是使用的這個) sigterm,一般人都是用這裡倆方法 kill 程序,只要監聽這倆訊號不讓程序退出,然後其他人想要像重啟程序產生的第乙個想法就是 kill -9,kill -9 子程序不會被乾掉,贊,這樣就進了我們的套。

setproctitle("myscript");
如果 php version >= 5.5.0 可以用這個

cli_set_process_title("myscript")
假如使用這種方式在測試環境消費mq資料,其他人在修了**並重啟程序,就會發現自己的資料總是莫名其妙的消失,而且還找不到是誰消費的,如果是kafka或者nsq之流還可以通過新增group或channel的方式繼續開發,但是如果是 redis 的 list 做 mq ,嘿嘿……

坑人的同時也得防止被坑不是,我們需要處理這種事情的時候,先找到主程序 pid ,然後使用這個命令

ps --ppid 父程序的pid
我懂得,你肯定想噴我,你這人這麼怎麼缺德,呵呵呵,我就是被人這麼坑了一會,才這麼印象深刻,難受。

一招教你關閉瀏覽視窗

工作列預覽功能在windows7那個時候還是比較不錯的功能,但是現在在windows8或者10上就顯得有點沒啥用了,windows10把可以關閉的工作列預覽功能選項刪除了,滑鼠滑過後不僅會遮擋螢幕,要是磁碟效能不濟,卡頓跳幀是經常有的事。既然 設定 和 控制面板 中沒有,那就只好拿登錄檔開刀了。wi...

一招教你如何把Excel轉換為PDF

當你想把excel資料 給別人看,但不想讓別人修改,這時候最好的方法就是把excel 轉換為pdf檔案。在excel2003的時候需要借助工具來更換成pdf格式,但是到了excel2010就可以直接另存為成pdf格式的檔案了。下面我們就來講一下如何用excel2010簡單即將excel檔案變為pdf...

教你一招 如何把桌面弄到D盤

有很多有個習慣,就是桌面上有好多檔案,幾乎重要的檔案和工作檔案都在桌面和我的文件裡面,嘿嘿,我也是其中之一啊,哈哈,好幾次重灌了系統丟了檔案,那個著急啊。今天就教大家如何把桌面移到d盤,我們首先在d盤根目錄下新建乙個資料夾 桌面檔案,然後找到原來桌面的原始路徑,c盤 documents and se...