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




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中,可以使用`multiprocessing`模块来创建父子进程,并且通过进程间通信(IPC)来实现它们之间的通讯。下面是一个简单的示例: ```python from multiprocessing import Process, Pipe # 定义一个函数作为子进程的任务 def child_task(conn): # 子进程通过连接发送消息给父进程 conn.send("Hello from child process!") # 接收父进程发送的消息 message = conn.recv() print("Child process received:", message) # 关闭连接 conn.close() if __name__ == '__main__': # 创建一个管道,用于进程间通信 parent_conn, child_conn = Pipe() # 创建子进程,传入管道连接 child_process = Process(target=child_task, args=(child_conn,)) # 启动子进程 child_process.start() # 父进程通过连接接收子进程发送的消息 message = parent_conn.recv() print("Parent process received:", message) # 父进程通过连接发送消息给子进程 parent_conn.send("Hello from parent process!") # 等待子进程结束 child_process.join() ``` 在上面的示例中,我们使用`Pipe`函数创建了一个双向管道,然后将管道的一端传递给子进程。子进程通过连接发送消息给父进程,并且接收父进程发送的消息。父进程也可以通过连接接收子进程发送的消息,并且发送消息给子进程。最后,我们使用`join`方法等待子进程结束。 这只是一个简单的示例,实际上,Python中还有其他的进程间通信方式,如使用`Queue`、`Manager`等。你可以根据具体的需求选择适合的方式来实现进程间通信
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值