由於父程序建立子程序是非同步的,雙方不知道各自的執行狀態,而父程序有的時候需要知道子程序退出時的一些資訊,所以 linux提供了一種機制,通過讓子程序退出時向父程序傳送 sigchrd 訊號來告知父程序,子程序已經退出了。同時,父程序通過呼叫 wait 和 waitpid 來獲取子程序的退出資訊。
import time
import subprocess
from multiprocessing import process, queue
def open_test_server(port, q):
com = '/users/job/venvs/test/bin/python {} {}'.format('/users/job/my_tests/test_server.py', port)
try:
test_process = subprocess.popen(com.split())
pid = test_process.pid
except exception as e:
test_process = none
pid = none
print(e)
q.put()
def main(port):
q = queue()
sub_process = process(target=open_test_server, args=(port, q))
sub_process.start()
sub_process.join()
info = q.get()
print(info)
if __name__ == '__main__':
main(12345)
while true:
time.sleep(10)
print('父程序睡了10秒')
啟動執行緒
設定為守護執行緒 setdaemon(true)
迴圈監聽等待訊號
**
import threading
import subprocess
def start_proxy():
try:
p = subprocess.popen("要啟動的程式", stdout=subprocess.pipe, stderr=subprocess.pipe)
while true:
process_code = p.poll()
if process_code is not none and process_code != 0:
print("程序異常退出!{}".format(str(process_code)))
break
if process_code == 0:
print("程序正常退出!{}".format(str(process_code)))
break
except exception as e:
print(e)
def start_threading():
try:
td = threading.thread(
target=start_proxy
)td.setdaemon(true)
td.start()
except threading.threaderror as e:
print(e)
if __name__ == '__main__':
start_threading()
python利用waitpid 處理殭屍程序
1.父程序列印父親後處於掛起狀態等待子程序完成所有命令後,父程序處理了子程序後在執行父程序的命令。import os import time re os.fork if re print 父親 result os.waitpid 1 0 0表示掛起父程序當子程序完成任務後父程序處理了子程序在執行父程...
解決殭屍程序
linux下的殭屍程序,用kill 9 都不會消失,下面有一種辦法可以解決此問題 前些天發現有crontask程序死掉了,狀態為z,表明是殭屍程序了。通過下面的步驟可以解決它 1.用pstree命令查詢其父程序 5124 ss 0 00 crond 8884 s 0 00 crond 8893 zs...
解決殭屍程序
這幾天同事寫的程式中出現了大量的殭屍程序,幫忙分析了一下,問題出現在幾個方面 首先top命令檢視殭屍程序數目 檢視所有的殭屍程序 殺死所有殭屍程序 ps a o stat,ppid,pid,cmd grep e zz awk xargs kill 9 在程式中幾個注意的方面 1.建立子程序後,父程序...