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个僵尸进程


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

实战完毕

目录
相关文章
|
1月前
|
Go 索引
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
|
2月前
|
Linux C语言
Linux: 僵尸进程究竟是什么?有什么危害?
Linux: 僵尸进程究竟是什么?有什么危害?
37 0
|
18小时前
|
存储 Java Linux
聊聊Go程序是如何运行的
本文作者 **sharkChili** 是一名 Java 和 Go 语言开发者,同时也是 CSDN 博客专家和 JavaGuide 维护者。文章探讨了 Go 语言的执行过程,从汇编角度出发,解释了如何从 `main.go` 文件开始,经过入口跳转、参数拷贝、启动协程、运行 `g0` 的 `main` 方法等步骤,最终执行到用户定义的 `main` 函数。文章还展示了相关汇编代码片段,并提供了运行时检查、系统初始化和调度器初始化的细节。结尾提到,有兴趣的读者可以加入作者创建的交流群进行深入讨论。
8 0
|
4天前
|
存储 Java Android开发
app应用程序进程启动过程
app应用程序进程启动过程
11 1
|
9天前
|
JSON 监控 安全
Golang深入浅出之-Go语言中的反射(reflect):原理与实战应用
【5月更文挑战第1天】Go语言的反射允许运行时检查和修改结构,主要通过`reflect`包的`Type`和`Value`实现。然而,滥用反射可能导致代码复杂和性能下降。要安全使用,应注意避免过度使用,始终进行类型检查,并尊重封装。反射的应用包括动态接口实现、JSON序列化和元编程。理解反射原理并谨慎使用是关键,应尽量保持代码静态类型。
21 2
|
11天前
|
JSON JavaScript 前端开发
Golang深入浅出之-Go语言JSON处理:编码与解码实战
【4月更文挑战第26天】本文探讨了Go语言中处理JSON的常见问题及解决策略。通过`json.Marshal`和`json.Unmarshal`进行编码和解码,同时指出结构体标签、时间处理、omitempty使用及数组/切片区别等易错点。建议正确使用结构体标签,自定义处理`time.Time`,明智选择omitempty,并理解数组与切片差异。文中提供基础示例及时间类型处理的实战代码,帮助读者掌握JSON操作。
22 1
Golang深入浅出之-Go语言JSON处理:编码与解码实战
|
11天前
|
弹性计算 Shell Linux
查找Linux 系统中的僵尸进程
【4月更文挑战第29天】
7 0
|
12天前
|
弹性计算 Shell Linux
查找 Linux 系统中的僵尸进程
【4月更文挑战第28天】
5 0
|
12天前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中,Go语言的函数计算服务Go程序没有正确打包如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
22 0
|
12天前
|
Unix Linux Go
Golang深入浅出之-信号(Signals)处理与优雅退出Go程序
【4月更文挑战第25天】Go语言中的信号处理关乎程序对外部事件的响应,尤其是优雅地终止进程。本文介绍了信号基础,如SIGINT、SIGTERM等常见信号,以及处理流程:注册处理器、等待信号、执行清理和优雅退出。强调了三个易错点及避免方法,并提供实战代码示例展示如何监听和响应信号。信号处理应简洁高效,确保程序健壮性和用户体验。
19 0