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