php兩種實現守護程序的方式

2022-06-17 07:36:09 字數 2350 閱讀 2301

第一種方式,借助 nohup 和 &  配合使用。

在命令後面加上 & 符號, 可以讓啟動的程序轉到後台執行,而不占用控制台,控制台還可以再執行其他命令,這裡我使用乙個while死迴圈來做演示,**如下

<?php

while(true)

用 & 方式來啟動該程序

[root@localhost php]# php deadloop.php &

[1] 3454

[root@localhost php]# ps aux | grep 3454

root 3454 0.0 0.8 284544 8452 pts/0 t 18:06 0:00 php deadloop.php

root 3456 0.0 0.0 103316 896 pts/0 s+ 18:08 0:00 grep 3454

[1]+ stopped php deadloop.php

[root@localhost php]#

可以看到該程序並未占用控制台,控制台還可以執行其他命令,這時我們還可以通過 fg 命令讓程序恢復到普通占用控制台的模式。

[root@localhost php]# fg

php deadloop.php

1470996682

1470996685

1470996688

1470996691

以上就是關於 & 命令簡單介紹

下面再來看另乙個命令 nohup

sighup會在以下3種情況下被傳送給相應的程序:

1、終端關閉時,該訊號被傳送到session首程序以及作為job提交的程序(即用 & 符號提交的程序)

2、session首程序退出時,該訊號被傳送到該session中的前台程序組中的每乙個程序

3、若父程序退出導致程序組成為孤兒程序組,且該程序組中有程序處於停止狀態(收到sigstop或sigtstp訊號),該訊號會被傳送到該程序組中的每乙個程序。

[root@localhost php]# ls

cmd.sh deadloop.php getphoto.php nohup.out pics

[root@localhost php]# tail -f nohup.out

1470999772

1470999775

1470999778

1470999781

1470999784

1470999787

1470999790

1470999793

1470999796

1470999799

1470999802

此時 關閉終端,程序不會結束,而是變成了孤兒程序(ppid=1),因為建立它的父程序退出了。

[root@localhost ~]# ps -ef | grep 3554

root 3554 3497 0 19:09 pts/0 00:00:00 php deadloop.php

root 3575 3557 0 19:10 pts/1 00:00:00 grep 3554

[root@localhost ~]# ps -ef | grep 3554

root 3554 1 0 19:09 ? 00:00:00 php deadloop.php

root 3577 3557 0 19:10 pts/1 00:00:00 grep 3554

[root@localhost ~]#

結論: 所以當我們組合 nohup 和 & 兩種方式時,啟動的程序不會占用控制台,也不依賴控制台,控制台關閉之後程序被1號程序收養,成為孤兒程序,這就和守護程序的機制非常類似了。

[root@localhost php]# nohup php deadloop.php >logs.txt 2>error.txt &

[1] 3612

[root@localhost php]# ps -ef |grep 3612

root 3612 3557 0 19:18 pts/1 00:00:00 php deadloop.php

root 3617 3557 0 19:19 pts/1 00:00:00 grep 3612

[root@localhost php]#

其中 >logs.txt 重定向標準輸出,2>error.txt 重定向標準錯誤輸出。

以上就是關於第一種實現方式的介紹。

第二種實現方式就是根據守護程序的規則和特點通過**來實現,守護程序最大的特點就是脫離了使用者終端和會話,下面是實現的**,關鍵地方進行了注釋。

兩種程序遍歷方式

病毒樣本md5 642a393a5c65d202180df5af06f29c5a include include 通過hkey performance data遍歷程序.從nimda病毒中發現的這種方式.int main dword cb 0x40000,type 0 regqueryvalueex...

delphi殺程序的兩種方式

第一種 比較簡單,根據標題,找到視窗,再找到程序,殺死程序 procedure killprogram windowtitle string const process terminate 0001 var processhandle thandle processid integer thewin...

2 2 開啟程序的兩種方式

python中的多執行緒無法利用多核優勢,如果想要充分地使用多核cpu的資源 os.cpu count 檢視 在python中大部分情況需要使用多程序。python提供了multiprocessing。multiprocessing模組用來開啟子程序,並在子程序中執行我們定製的任務 比如函式 該模組...