代码中,起了一个socket监听,为tcp协议的1800端口,意思是当收到客户端连接时,会起一个go协程通过exec执行Python脚本,然后返回一个receive ok的消息,再断开连接
go程序代码,文件名js.go
packagemainimport ( "fmt""net") import"os/exec"funcdo(addrstring) { cmd :=exec.Command("/usr/bin/python3", "/root/p.py", addr) err :=cmd.Start() iferr!=nil { fmt.Println(err) } } funcmain() { ln, err :=net.Listen("tcp", ":1800") iferr!=nil { fmt.Println(err) } for { con, err :=ln.Accept() iferr!=nil { fmt.Println(err) continue } godo(con.RemoteAddr().String()) con.Write([]byte("receive ok")) con.Close() } }
Python脚本代码
importsysf=open("/tmp/remote_addr.log","a+") print(sys.argv[1],file=f)
代码编译后,执行程序
通过nc模拟网络连接, 调用了4次
服务端收到网络连接后会调用Python程序,查看日志
[root@izbp152ke14timzud0du15z ~]# cat /tmp/remote_addr.log127.0.0.1:52594 127.0.0.1:52980 127.0.0.1:53694 127.0.0.1:53720
检验是否产生了4个僵尸进程
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程
实战完毕