python之父子进程间通信

当进行fork的时候,父父进程的信息会复制到子进程,这本身已经是一种通信方式了,即子进程复制父进程资源,除此之外,还想让这两个进程进行通信,有什么方法呢?可以使用socketpair的方式。


我的疑惑是socketpair返回的描述符有没有服务端与客户端的区别?

# -*- coding:utf-8 -*-
import socket
import os
import time


parent, child = socket.socketpair(socket.AF_UNIX, socket.SOCK_STREAM)
# fork的一刹那父子是相同的
pid = os.fork()


if pid:
    # in parent
    child.close()

    parent.sendall('hello, i am parent')

    response = parent.recv(1024)
    print "i am in parent ", os.getpid()
    print response
    time.sleep(0.1)
    parent.close()
    # print parent.fileno()

else:
    # child process
    parent.close()
    print "i am in child ", os.getpid()
    child.sendall('hello, i am child')
    message = child.recv(1024)
    print message
    time.sleep(0.1)
    child.close()
    


一个基于udp的server,结合nc使用,可以构建一个简单的shell

# -*- coding:utf-8 -*-
import socket
import sys
import commands
import os


# 最原始的基于udp协议的shell
server_address = ('localhost', 8000)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.bind(server_address)

while True:
    data, client = sock.recvfrom(1024)
    if "quit" not in data:
        if data.strip():
            # 假如这里的data是从web来的,那么这样我就实现了一个基于python的webshell,目前这个shell还不能处理交互式
            sock.sendto(commands.getoutput(data.strip()) + os.linesep, client)
        else:
            pass
    else:
        break

sys.exit()




posted @ 2022-03-06 10:39  叶常落  阅读(428)  评论(0编辑  收藏  举报