第一種方式,借助 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模組用來開啟子程序,並在子程序中執行我們定製的任務 比如函式 該模組...