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()




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值