博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python进程之间消息监控程序
阅读量:6983 次
发布时间:2019-06-27

本文共 2002 字,大约阅读时间需要 6 分钟。

hot3.png

外界调用向mgr进程发送消息,mgr根据不同消息启动或关闭相应进程(启动的进程,独占用,只启动一个);

若有进程程退出 则mgr向外界发出信号。

外界代码:

#!/usr/bin/python

#

# -*- coding:utf-8 -*-

#

#

import sys

import os

import subprocess

import signal

import time

import random

def sig_usr1(signum, frame):

  print("recive sinal from process(exited)")

signal.signal(signal.SIGUSR1, sig_usr1)

cmds= ['./mgr.py']

n =1

p = subprocess.Popen( cmds,stdin=subprocess.PIPE,stderr=subprocess.PIPE,close_fds=False)

while True:

    time.sleep(1)

    ret = p.poll()

    if ret is None:

      #print("main="+str(n))

      p.stdin.write(str(n)+"\n")

      p.stdin.flush()

      p.send_signal(signal.SIGUSR1)

      n = random.randint(1, 3)

print("main exit")

管理进程

#!/usr/bin/python

#

# -*- coding:utf-8 -*-

#

import sys

import os

import time

import signal

import subprocess

import json

data = {'num': 0, 'error': 0}

def getParentID():

  p=subprocess.Popen("ps -ef|grep tt.py|grep -v grep|awk '{print $2}'",stdout=subprocess.PIPE,shell=True)

  ret = int(p.stdout.readline())

  return ret

par_id = getParentID()

print(par_id)

exe_process = 0

isRuning = True

def sig_usr1(signum, frame):

  ret = sys.stdin.readline()

  data['num'] = int(ret)

signal.signal(signal.SIGUSR1, sig_usr1)

while isRuning:

  time.sleep(1)

  print("data['num'] ="+str(data['num']))

  if exe_process == 0: #for open

    if data['num'] == 1:

      exe_process=subprocess.Popen("./a.out",close_fds=False)

    elif data['num'] == 2:

      exe_process=subprocess.Popen("./b.out",close_fds=False)

    else:

      continue

  else: #if exe_process == 0: for close

    ret = exe_process.poll()

    if ret is None:

      if data['num'] == 3:

        exe_process.terminate()

        exe_process = 0

        os.kill(par_id,signal.SIGUSR1)

    else: #if ret is None self close

      exe_process = 0

      print("end"+str(par_id))

      os.kill(par_id,signal.SIGUSR1)

print "mgr process over "

python进程通讯注意问题

1)发送信号: os.kill(par_id,signal.SIGUSR1)  #注意要 import os

2)subprocess结合管道要注意,不用就不要打开,否则容易出错

    比如p = subprocess.Popen(cmd,stdin=subprocess.PIPE,close_fds=False)

    stdin 要用到。

3)用subprocess调用Popen时候,cmd若是python脚本,要确保能编译通过并运行。则调用,否则不好排除错误

转载于:https://my.oschina.net/u/2408048/blog/539840

你可能感兴趣的文章
Oracle 增删改查
查看>>
window系统下如何查看so库的信息
查看>>
react native 从头开始
查看>>
TCP/IP协议中的一些常用端口简单讲解
查看>>
Beautifulsoup模块
查看>>
nginx请求频率限制模块ngx_http_limit_req_module
查看>>
单表 查询
查看>>
JDK_下载网址
查看>>
C++宏定义中"#"与"##"的妙用
查看>>
laravel-admin配置安装完新手使用
查看>>
运用《深入理解Java虚拟机》书中知识解决实际问题
查看>>
数据库学习(MySQL):JDBC的简单增删改查实现
查看>>
Github开源项目分享
查看>>
P678-vect2.cpp
查看>>
checkbox复选框样式
查看>>
Jquery 日期差函数 修改 对火狐进行兼容
查看>>
python debug
查看>>
百度地图上进行空间插值---反距离加权法
查看>>
指针数组和数组指针——兄弟你的括号呢?
查看>>
poj 2001
查看>>