Go如何关闭exec可执行程序

本文介绍了使用Go语言通过syscall和cmd.Process两种方式关闭指定PID进程的方法,并提供了代码示例及POSIX.1-1990标准信号量的详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

前言

正文

一、syscall

二、cmd

信号量表

结论


前言

大家都知道go的协程操作非常灵活,但是有没有想过go如何操作进程,特别是关闭特定Pid的进程。

正文

今天向大家介绍两种使用go关闭进程的方法,话不多说直接上代码。

一、syscall

利用syscall包,具体代码请参考:

var cmd *exec.Cmd

syscall.Kill(cmd.Process.Pid, syscall.SIGKILL) 

其中,参数一是具体进程的PID,参数二是信号量标识。 

注意:信号量标识,表明了特定的信号动作,文章在后面列出了POSIX.1-1990的一些标准定义。

二、cmd

利用cmd.Process模块,具体代码请参考: 

var cmd *exec.Cmd

cmd.Process.Kill()

信号量表

POSIX.1-1990标准中定义了一些信号,具体参考如下表格:

信号动作说明
SIGHUP1Term终端控制进程结束(终端连接断开)
SIGINT2Term用户发送INTR字符(Ctrl+C)触发
SIGQUIT3Core用户发送QUIT字符(Ctrl+/)触发
SIGILL4Core非法指令(程序错误、试图执行数据段、栈溢出等)
SIGABRT6Core调用abort函数触发
SIGFPE8Core算术运行错误(浮点运算错误、除数为零等)
SIGKILL9Term无条件结束程序(不能被捕获、阻塞或忽略)
SIGSEGV11Core无效内存引用(试图访问不属于自己的内存空间、对只读内存空间进行写操作)
SIGPIPE13Term消息管道损坏(FIFO/Socket通信时,管道未打开而进行写操作)
SIGALRM14Term时钟定时信号
SIGTERM15Term结束程序(可以被捕获、阻塞或忽略)
SIGUSR130,10,16Term用户保留
SIGUSR231,12,17Term用户保留
SIGCHLD20,17,18Ign子进程结束(由父进程接收)
SIGCONT19,18,25Cont继续执行已经停止的进程(不能被阻塞)
SIGSTOP17,19,23Stop停止进程(不能被捕获、阻塞或忽略)
SIGTSTP18,20,24Stop停止进程(可以被捕获、阻塞或忽略)
SIGTTIN21,21,26Stop后台程序从终端中读取数据时触发
SIGTTOU22,22,27Stop后台程序向终端中写数据时触发

结论

根据实际效果验证,上述两种方法的效果是一致的。syscall换成其他信号量,效果会略有所不同,感兴趣的同学自己尝试。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data-Mining

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值