欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識(shí)庫 > 解決python subprocess參數(shù)shell=True踩到的坑

解決python subprocess參數(shù)shell=True踩到的坑

熱門標(biāo)簽:蓋州市地圖標(biāo)注 上海機(jī)器人外呼系統(tǒng)哪家好 房產(chǎn)電銷外呼系統(tǒng) 南京銷售外呼系統(tǒng)軟件 地圖標(biāo)注微信發(fā)送位置不顯示 地圖標(biāo)注的意義點(diǎn) 地圖制圖標(biāo)注位置改變是移位嗎 315電話機(jī)器人廣告 浙江電銷卡外呼系統(tǒng)好用嗎

0x01 問題現(xiàn)象

寫的程序使用subprocess創(chuàng)建子進(jìn)程運(yùn)行其他程序,判斷其他程序運(yùn)行完后進(jìn)行處理。

在subprocess使用了shell=True,判斷用戶程序退出的代碼如下

while self.proc.poll() is None:
    do_something

判斷子進(jìn)程是否運(yùn)行結(jié)束,程序在子進(jìn)程運(yùn)行結(jié)束后,代碼未向下繼續(xù)運(yùn)行,而是卡在了這個(gè)循環(huán)中。

0x02 原因分析

百度后對shell參數(shù)的解釋如下:

shell=True參數(shù)會(huì)讓subprocess.Popen接受字符串類型的變量作為命令,并調(diào)用shell去執(zhí)行這個(gè)字符串,當(dāng)shell=False是,subprocess.Popen只接受數(shù)組變量作為命令,并將數(shù)組的第一個(gè)元素作為命令,剩下的全部作為該命令的參數(shù)。

通過查看服務(wù)器進(jìn)程可以看到,仍然有進(jìn)程存在,進(jìn)程如下

為shell中運(yùn)行的程序,由此可以得出,shell=true時(shí),子進(jìn)程在運(yùn)行完后,shell并沒有退出,而是卡在shell命令中,可由進(jìn)程看到。

補(bǔ)充:Python踩坑之旅其一殺不死的Shell子進(jìn)程

1.1 踩坑案例

踩坑的程序是個(gè)常駐的Agent類管理進(jìn)程, 包括但不限于如下類型的任務(wù)在執(zhí)行:

a. 多線程的網(wǎng)絡(luò)通信包處理

和控制Master節(jié)點(diǎn)交互

有固定Listen端口

b. 定期作業(yè)任務(wù), 通過subprocess.Pipe執(zhí)行shell命令

c. etc

發(fā)現(xiàn)坑的過程很有意思:

a.重啟Agent發(fā)現(xiàn)Port被占用了

=> 立刻想到可能進(jìn)程沒被殺死, 是不是停止腳本出問題

=> 排除發(fā)現(xiàn)不是, Agent進(jìn)程確實(shí)死亡了

=> 通過 netstat -tanop|grep port_number 發(fā)現(xiàn)端口確實(shí)有人占用

=> 調(diào)試環(huán)境, 直接殺掉占用進(jìn)程了之, 錯(cuò)失首次發(fā)現(xiàn)問題的機(jī)會(huì)

b.問題在一段時(shí)間后重現(xiàn), 重啟后Port還是被占用

定位問題出現(xiàn)在一個(gè)叫做xxxxxx.sh的腳本, 該腳本占用了Agent使用的端口

=> 奇了怪了, 一個(gè)xxx.sh腳本使用這個(gè)奇葩Port干啥(大于60000的Port, 有興趣的磚友可以想下為什么Agent默認(rèn)使用6W+的端口)

=> review該腳本并沒有進(jìn)行端口監(jiān)聽的代碼

一拍腦袋, c.進(jìn)程共享了父進(jìn)程資源了

=> 溯源該腳本,發(fā)現(xiàn)確實(shí)是Agent啟動(dòng)的任務(wù)中的腳本之一

=> 問題基本定位, 該腳本屬于Agent調(diào)用的腳本

=> 該Agent繼承了Agent原來的資源FD, 也就是這個(gè)port

=> 雖然該腳本由于超時(shí)被動(dòng)觸發(fā)了terminate機(jī)制, 但terminate并沒有干掉這個(gè)子進(jìn)程

=> 該腳本進(jìn)程的父進(jìn)程(ppid) 被重置為了1

d.問題****出在腳本進(jìn)程超時(shí)kill邏輯

1.2 填坑解法

通過代碼review, 找到shell具體執(zhí)行的庫代碼如下:

self._subpro = subprocess.Popen(
    cmd, shell=True, stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    preexec_fn=_signal_handle
)
# 重點(diǎn)是shell=True !

把上述代碼改為:

self._subpro = subprocess.Popen(
    cmd.split(), stdout=subprocess.PIPE,
    stderr=subprocess.PIPE, preexec_fn=_signal_handle
)
# 重點(diǎn)是去掉了shell=True

1.3 坑位分析

Agent會(huì)在一個(gè)新創(chuàng)建的threading線程中執(zhí)行這段代碼, 如果線程執(zhí)行時(shí)間超時(shí)(xx seconds), 會(huì)調(diào)用 self._subpro.terminate()終止該腳本.

表面正常:

啟用新線程執(zhí)行該腳本

如果出現(xiàn)問題,執(zhí)行超時(shí)防止hang住其他任務(wù)執(zhí)行調(diào)用terminate殺死進(jìn)程

深層問題:

Python 2.7.x中subprocess.Pipe 如果shell=True, 會(huì)默認(rèn)把相關(guān)的pid設(shè)置為shell(sh/bash/etc)本身(執(zhí)行命令的shell父進(jìn)程), 并非執(zhí)行cmd任務(wù)的那個(gè)進(jìn)程

子進(jìn)程由于會(huì)復(fù)制父進(jìn)程的opened FD表, 導(dǎo)致即使被殺死, 依然保留了擁有這個(gè)Listened Port FD

這樣雖然殺死了shell進(jìn)程(未必死亡, 可能進(jìn)入defunct狀態(tài)), 但實(shí)際的執(zhí)行進(jìn)程確活著. 于是1.1中的坑就被結(jié)實(shí)的踩上了.

1.4 坑后擴(kuò)展

1.4.1 擴(kuò)展知識(shí)

本節(jié)擴(kuò)展知識(shí)包括二個(gè)部分:

Linux系統(tǒng)中, 子進(jìn)程一般會(huì)繼承父進(jìn)程的哪些信息

Agent這種常駐進(jìn)程選擇>60000端口的意義

擴(kuò)展知識(shí)留到下篇末尾講述, 感興趣的可以自行搜索

1.4.1 技術(shù)關(guān)鍵字

Linux系統(tǒng)進(jìn)程

Linux隨機(jī)端口選擇

程序多線程執(zhí)行

Shell執(zhí)行

1.5 填坑總結(jié)

1.子進(jìn)程會(huì)繼承父進(jìn)程的資源信息

2.如果只kill某進(jìn)程的父進(jìn)程, 集成了父進(jìn)程資源的子進(jìn)程會(huì)繼續(xù)占用父進(jìn)程的資源不釋放, 包括但不限于

listened port

opened fd

etc

3.Python Popen使用上, shell的bool狀態(tài)決定了進(jìn)程kill的邏輯, 需要根據(jù)場景選擇使用方式

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Python實(shí)現(xiàn)系統(tǒng)交互(subprocess)
  • Python實(shí)現(xiàn)subprocess執(zhí)行外部命令
  • Python中使用subprocess庫創(chuàng)建附加進(jìn)程
  • Python中Subprocess的不同函數(shù)解析
  • python中subprocess實(shí)例用法及知識(shí)點(diǎn)詳解

標(biāo)簽:雙鴨山 陽泉 貴州 臨汾 赤峰 克拉瑪依 金華 日照

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解決python subprocess參數(shù)shell=True踩到的坑》,本文關(guān)鍵詞  解決,python,subprocess,參數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解決python subprocess參數(shù)shell=True踩到的坑》相關(guān)的同類信息!
  • 本頁收集關(guān)于解決python subprocess參數(shù)shell=True踩到的坑的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    youjizz亚洲女人| 国产欧美久久久精品影院| 欧美另类变人与禽xxxxx| 色综合中文字幕国产| 麻豆视频在线免费看| 欧美日韩国产三级| 一区二区三区四区国产精品| 舔着乳尖日韩一区| 久久99久久99小草精品免视看| 国产精品一级在线| 丰满饥渴老女人hd| 成年人网站免费在线观看| 日本成人精品视频| 欧美日韩日日夜夜| 国产日韩欧美激情| 国产精品一线二线三线| 日本污视频网站| 欧美疯狂做受xxxx富婆| 亚洲图片一区二区| 国产成人免费高清| 中文字幕一区三区久久女搜查官| 小嫩苞一区二区三区| 91免费看片在线观看| 亚洲av成人片无码| 一本色道久久综合亚洲91| 日韩一区二区电影网| 亚洲欧美在线高清| 蜜桃精品在线观看| 91九色蝌蚪porny| 色婷婷av一区| 亚洲午夜久久久久久久久久久 | 少妇大叫太粗太大爽一区二区| 日韩午夜电影在线观看| 久久99精品久久久久久动态图| 日本人亚洲人jjzzjjz| 中文字幕不卡的av| 久久精品国产99| 一级免费黄色录像| 亚洲精品中文字幕乱码三区| 国产在线视频精品一区| 大乳护士喂奶hd| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲日本在线视频观看| 国产高清一区日本| 色爱区综合激月婷婷| 日本一区二区三区四区 | 国内成人自拍视频| 亚洲国产123| 国产三级欧美三级日产三级99| 免费高清视频精品| chinese麻豆新拍video| 久久婷婷综合激情| 经典三级视频一区| 偷拍夫妻性生活| 日韩欧美国产一二三区| 日韩中文字幕麻豆| 国产亚洲无码精品| 中文字幕av资源一区| 污污免费在线观看| 国产亚洲精品aa| 爱情岛论坛亚洲自拍| 日韩欧美国产电影| 成人高清伦理免费影院在线观看| 在线看片中文字幕| 亚洲精品国产成人久久av盗摄| 久久丫精品国产亚洲av不卡| 国产精品免费视频网站| 成人在线视频一区二区| 国产va在线播放| 1024亚洲合集| 国产ts丝袜人妖系列视频| 精品粉嫩超白一线天av| eeuss鲁片一区二区三区 | 卡一卡二国产精品 | 激情av综合网| 欧美在线观看视频一区二区 | 国产亚洲欧美激情| 9191在线视频| 欧美一级精品在线| 老司机免费视频一区二区三区| 色又黄又爽网站www久久| 免费的成人av| 欧美性猛交一区二区三区精品| 亚洲成人精品在线观看| 网站免费在线观看| 亚洲视频精选在线| 99久久99久久精品免费看小说.| 亚洲一区二区三区美女| 亚洲av片不卡无码久久| 亚洲欧美一区二区三区久本道91| 日本一区二区三区在线免费观看| 久久一留热品黄| 午夜剧场免费看| 亚洲美女免费在线| 中文字幕乱码av| 久草这里只有精品视频| 欧美精三区欧美精三区| 99在线热播精品免费| 国产日韩视频一区二区三区| 亚洲天堂成人av| 亚洲一区欧美一区| 色国产精品一区在线观看| 国产酒店精品激情| 精品国产sm最大网站免费看| 性农村xxxxx小树林| 亚洲欧美激情小说另类| 51精品免费网站| 精品一区二区三区久久久| 日韩一区二区不卡| 黄色激情在线观看| 亚洲综合激情小说| 在线精品视频小说1| 成人黄色在线网站| 中文字幕av一区二区三区高| 女人黄色一级片| 久久超碰97中文字幕| 日韩欧美一区中文| 在线免费观看a级片| 亚洲国产色一区| 欧美视频在线播放| 香蕉网在线视频| 亚洲精品视频在线看| 日本韩国一区二区三区视频| 成人18视频日本| 国产精品久久久久影院色老大| 中文字幕 日本| 亚洲成人免费av| 777奇米四色成人影色区| 成人综合婷婷国产精品久久免费| 久久久影院官网| 古装做爰无遮挡三级聊斋艳谭| 亚洲色图视频免费播放| 色综合天天综合在线视频| 成人伦理片在线| 1024精品合集| 在线观看亚洲成人| 亚洲成人福利视频| 亚洲v日本v欧美v久久精品| 欧美精品v日韩精品v韩国精品v| 无码国产精品久久一区免费| 亚洲一二三四在线观看| 欧美裸体bbwbbwbbw| 星空大象在线观看免费播放| 日韩国产精品91| 欧美videofree性高清杂交| 9191在线视频| 丝袜国产日韩另类美女| 日韩欧美一二三区| 娇妻被老王脔到高潮失禁视频| 偷拍自拍另类欧美| 欧美一区二区三区免费| 高潮毛片无遮挡| 石原莉奈在线亚洲三区| 日韩美一区二区三区| 永久免费毛片在线观看| 粉嫩久久99精品久久久久久夜 | 亚洲av熟女高潮一区二区| 午夜成人在线视频| 精品裸体舞一区二区三区| 亚洲国产精品一区二区久久hs| 成人黄色大片在线观看| 欧美剧在线免费观看网站| 一区二区三区高清在线| 欧美日韩国产综合一区二区 | 粉嫩欧美一区二区三区高清影视| 18涩涩午夜精品.www| 欧美三级电影精品| 免费在线观看成年人视频| 国产伦精品一区二区三区免费迷 | 樱花影视一区二区| 91精品国产色综合久久久蜜香臀| 人妻少妇无码精品视频区| 成人一区二区三区视频在线观看| 一区二区三区四区国产精品| 日韩欧美另类在线| 手机在线免费看片| 国产日韩视频一区| 国产高清精品在线| 亚洲五码中文字幕| 国产亚洲欧美一区在线观看| 欧美综合一区二区| 亚洲国产av一区| 91麻豆精品视频| 麻豆精品一二三| 亚洲视频网在线直播| 日韩欧美一级片| 色综合久久天天| 人妻少妇一区二区| a级高清视频欧美日韩| 日本欧美久久久久免费播放网| 欧美一区二区在线免费观看| 精品伦精品一区二区三区视频密桃| 91在线播放网址| 一区二区三区四区高清精品免费观看| 日韩视频免费直播| 91视频免费在线看| 亚洲最大成人网站| 久久久久久国产精品日本| 韩国av一区二区三区| 亚洲图片欧美综合|