go 程序模拟僵尸进程实战

简介: 避免后续写代码出现僵尸进程,特此实战记录一把

代码中,起了一个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个僵尸进程


僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程

实战完毕

目录
相关文章
|
4月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
708 2
|
4月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
75 2
|
3月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
29天前
|
Go 数据处理 开发者
Go 语言的反射机制允许程序在运行时动态检查和操作类型信息,提供极大的灵活性和扩展性
Go 语言的反射机制允许程序在运行时动态检查和操作类型信息,提供极大的灵活性和扩展性。本文探讨了反射的基本原理、主要操作、应用场景及注意事项,并通过实例展示了反射的实际应用,帮助开发者更好地理解和使用这一强大特性。
32 2
|
2月前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
37 3
|
3月前
|
Kubernetes Go 持续交付
一个基于Go程序的持续集成/持续部署(CI/CD)
本教程通过一个简单的Go程序示例,展示了如何使用GitHub Actions实现从代码提交到Kubernetes部署的CI/CD流程。首先创建并版本控制Go项目,接着编写Dockerfile构建镜像,再配置CI/CD流程自动化构建、推送Docker镜像及部署应用。此流程基于GitHub仓库,适用于快速迭代开发。
75 3
|
3月前
|
Kubernetes 持续交付 Go
创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线
创建一个基于Go程序的持续集成/持续部署(CI/CD)流水线
|
3月前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
185 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
2月前
|
Linux C++
Linux c/c++进程之僵尸进程和守护进程
这篇文章介绍了Linux系统中僵尸进程和守护进程的概念、产生原因、解决方法以及如何创建守护进程。
30 0
|
2月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
73 0