【問題1】當python中使用subprocess.popen建立乙個子程序,子程序中是web.py框架的web服務。如何徹底殺死子程序,並釋放埠和資源?
試過這樣
p = subprocess.popen(cmd,shell=
true
)p.kill(
)
發現並沒有釋放資源
還試過這樣
p = subprocess.popen(cmd,shell=
true
)os.killpg(p.pid,signal.sigusr1)
發現還是不行
1)經過一番研究發現這裡面有個問題,就是當shell=true時,p.pid拿到的不是子程序的id,而是shell的id。
如果設定shell=false時,則不能在cmd中寫多行命令
經過實驗發現,解決方案如下:
p = subprocess.popen(cmd,shell=
true
,executable=
"bash"
)os.killpg(p.pid,signal.sigusr1)
2)這樣就能得到正確的子程序id,但是還是不能殺死它,os.killpg說不存在,但其實存在,id號也是對的。
最終解決方案如下:
import subprocess,os,signal
p = subprocess.popen(cmd,shell=
true
,executable=
"bash"
,close_fds=
true
,preexec_fn=os.setsid)
os.killpg(p.pid,signal.sigusr1)
埠,資源全部釋放 Linux程序相關
下圖為ps命令各種字尾作用 uptime 了解計算機從啟動到現在已經多少時間 ps aux 檢視系統中正在執行的所有的程序 ps命令後面使用一下選項表示不同的含義 a 所有使用者 u 以面向使用者的形式顯示,即顯示擁有每個程序的使用者 x 顯示每個程序 f 提供完整的列表 僅僅執行ps aux,在預...
程序,執行緒 相關問題
建立程序 wchar cmdexe max path stprintf cmdexe,t s s c e,csparam cmd c s s startupinfo si process information pi si.dwflags startf useshowwindow 指定wshowwi...
linux 程序相關簡介
簡單的說,程序是處於執行狀態的程式,乙個執行著的程式可能有多個程序。程序一般分為互動程序 批處理程序和守護程序三類。守護程序總是活躍的,一般是後台執行,守護程序一般是由系統在開機時通過指令碼自動啟用啟動或超級管理使用者root來啟動。程序的屬性 程序標誌符 程序id,核心分配,該標誌符非負,範圍0 ...