之前看了Java的部署代碼骚揍,發(fā)現(xiàn)需要每次需要手動結(jié)束正在運行的進(jìn)程字管,然后再啟動新的部署代碼。所以我在考慮如何用程序自動實現(xiàn)這個功能。今天看程序的源碼正好看到這個功能嘲叔,所以來整理下相關(guān)的知識點以及描述如何實現(xiàn)脐供。
1.第一步是如何查詢相關(guān)關(guān)鍵詞的進(jìn)程。(PS:我先執(zhí)行一個命令php artisan testQuery借跪,內(nèi)容就是sleep(10000)).
2.在另一個終端查詢該運行的進(jìn)程信息政己,命令如下:ps aux | grep testQuery。
zuoluo 57239 0.0 0.0 2445080 808 s007 S+ 5:05下午 0:00.00 grep testQuery
zuoluo 57232 0.0 0.2 2491816 19944 s002 S+ 5:05下午 0:00.17 php artisan testQuery
3.這個時候我們會發(fā)現(xiàn)查詢testQuery關(guān)鍵詞掏愁,除了之前運行的進(jìn)程以外歇由,還有當(dāng)前查詢的進(jìn)程。很顯然這個當(dāng)前查詢的進(jìn)程不是我們需要的果港。所以改進(jìn)查詢命令:
ps aux | grep testQuery | grep -v grep.
zuoluo 57232 0.0 0.2 2491816 19944 s002 S+ 5:05下午 0:00.17 php artisan testQuery
4.這個時候已經(jīng)篩選出了我們需要的那個進(jìn)程信息沦泌,grep -v grep參數(shù)意思就是過濾掉grep關(guān)鍵詞的進(jìn)程。接下來我們就需要拿到進(jìn)程號辛掠。再次改進(jìn)查詢命令:
ps aux | grep testQuery | grep -v grep | awk ‘{print $2}’谢谦。
57232
5.最終拿到我們想要的進(jìn)程Id:57232。最后只需要結(jié)束這個進(jìn)程即可:xargs kill -SIGINT命令萝衩。完整的命令如下:
ps aux | grep testQuery | grep -v grep | awk ‘{print $2}’ | xargs kill -SIGINT.
PS:補充相關(guān)知識點:
1.grep命令格式:
grep [option] pattern file
主要參數(shù):
-c:只輸出匹配行的計數(shù)回挽。
-I:不區(qū)分大 小寫(只適用于單字符。
-l:查詢多文件時只輸出包含匹配字符的文件名猩谊。
-n:顯示匹配行及 行號千劈。
-s:不顯示不存在或無匹配文本的錯誤信息。
-v:顯示不包含匹配文本的所有行牌捷。
2.awk命令
awk工作流程是這樣的:讀入有’\n’換行符分割的一條記錄墙牌,然后將記錄按指定的域分隔符劃分域,填充域暗甥,$0則表示所有域,$1表示第一個域,$n表示第n個域喜滨。默認(rèn)域分隔符是”空白鍵” 或 “[tab]鍵”,所以$1表示登錄用戶,$3表示登錄用戶ip,以此類推撤防。
大家喜歡可以訪問我的個人網(wǎng)站:http://www.yingminxing.com
如有疑問虽风,歡迎溝通交流:QQ:370399195, 微信:yingminxing1988