iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang如何创建守护进程以及平滑重启
  • 401
分享到

Golang如何创建守护进程以及平滑重启

2023-06-15 04:06:42 401人浏览 安东尼
摘要

这篇文章主要介绍了golang如何创建守护进程以及平滑重启,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法如下1)生成守护进程直接上代码:package main

这篇文章主要介绍了golang如何创建守护进程以及平滑重启,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

方法如下

1)生成守护进程

直接上代码:

package mainimport (    "os"    "os/exec"    "path/filepath")func main() {    //判 断当其是否是子进程,当父进程return之后,子进程会被 系统1 号进程接管    if os.Getppid() != 1 {        // 将命令行参数中执行文件路径转换成可用路径        filePath, _ := filepath.Abs(os.Args[0])        cmd := exec.Command(filePath, os.Args[1:]...)        // 将其他命令传入生成出的进程        cmd.Stdin = os.Stdin // 给新进程设置文件描述符,可以重定向到文件中        cmd.Stdout = os.Stdout        cmd.Stderr = os.Stderr        cmd.Start() // 开始执行新进程,不等待新进程退出        return    }}

linux 系统熟悉的人应该知道:用户创建的守护进程会被 Linux 系统的 1 号进程接管。换句话说,上面的代码只能在 Linux 系统运行。Unix 系统我没有玩过。所以,也不能给出具体的建议。

我在网上看到还有其他的方法实现守护进程的创建。但是,我觉得只有上面源码的方式我觉得不错。并且成功用于项目当中。

比如:

os.StartProcess() 创建守护进程。syscall.RawSyscall() 创建守护进程。

唯独 exec.Command 创建守护进程的方式最高级。封装得最好。推荐使用这种试。

2) 守护进程启动/重启/停止

在第 1 点当中,我们已经成功启动了一个守护进程。但是,我们不可能使用 kill 命令去结束它。然后,再启动吧。所以,我们要用业界专业的手法:信号。

任何进程在运行中都能接收到我们发送给它的信号。关于 Linux 的信号有很多。大家可以自己 Google 搜索关键词:Linux 信号。

直接上源码:

package mainimport "fmt"import "os"import "os/signal"import "syscall"func main() {    // Go signal notification works by sending `os.Signal`    // values on a channel. We'll create a channel to    // receive these notifications (we'll also make one to    // notify us when the program can exit).    sigs := make(chan os.Signal, 1)    done := make(chan bool, 1)    // `signal.Notify` reGISters the given channel to    // receive notifications of the specified signals.    signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)    // This goroutine executes a blocking receive for    // signals. When it gets one it'll print it out    // and then notify the program that it can finish.    go func() {        sig := <-sigs        fmt.Println()        fmt.Println(sig)        done <- true    }()    // The program will wait here until it gets the    // expected signal (as indicated by the goroutine    // above sending a value on `done`) and then exit.    fmt.Println("awaiting signal")    <-done    fmt.Println("exiting")}

有三个关键点:
1)注册信号
2)接收信号
3)处理信号。

只要把创建守护进程与信号量处理整合一起,就能实现命令去管理守护进程了。

golang的优点

golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器而无需额外的依赖,所以golang的性能优于其他的解释性语言,且可以在golang中使用goroutine来实现并发性,它提供了一个非常优雅的goroutine调度程序系统,可以很容易地生成数百万个goroutine。

感谢你能够认真阅读完这篇文章,希望小编分享的“Golang如何创建守护进程以及平滑重启”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网GO频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: Golang如何创建守护进程以及平滑重启

本文链接: https://www.lsjlt.com/news/277622.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang如何创建守护进程以及平滑重启
    这篇文章主要介绍了Golang如何创建守护进程以及平滑重启,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法如下1)生成守护进程直接上代码:package main...
    99+
    2023-06-15
  • Golang怎么创建守护进程和平滑重启
    本篇内容介绍了“Golang怎么创建守护进程和平滑重启”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1)生成守护进程直接上代码:packag...
    99+
    2023-06-20
  • Linux守护进程如何启动
    本文小编为大家详细介绍“Linux守护进程如何启动”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux守护进程如何启动”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。&quo...
    99+
    2024-04-02
  • Linux中守护进程如何启动
    这篇文章将为大家详细讲解有关Linux中守护进程如何启动,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任...
    99+
    2023-06-27
  • 如何启动Linux的守护进程
    这篇文章主要介绍“如何启动Linux的守护进程”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何启动Linux的守护进程”文章能帮助大家解决问题。Linux Daemon(守护进程)是运行在后台的一...
    99+
    2023-06-27
  • linux中如何建立守护进程
    小编给大家分享一下linux中如何建立守护进程,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!linux 守护进程详解及建立守护进程守护进程是一种后台运行并且独立于...
    99+
    2023-06-09
  • 如何在python中创建守护线程
    这期内容当中小编将会给大家带来有关如何在python中创建守护线程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问...
    99+
    2023-06-14
  • 如何编写用模板的方式创建守护进程代码
    这篇文章主要介绍“如何编写用模板的方式创建守护进程代码”,在日常操作中,相信很多人在如何编写用模板的方式创建守护进程代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何编写用模板的方式创建守护进程代码”的疑...
    99+
    2023-06-09
  • mysql开启ssl以及如何创建证书
    MYSQL版本8.0.32,默认是开启ssl的,同时也是自带证书的在/var/lib/mysql/下 jdbc连接Mysql数据库需要使用SSL时,可以按一下步骤进行设置: 前置条件(可跳过): 新建SSL用户 CREATE USER 'q...
    99+
    2023-08-16
    ssl mysql 服务器
  • 如何进行Java中守护线程的分析及使用
    这篇文章跟大家分析一下“如何进行Java中守护线程的分析及使用”。内容详细易懂,对“如何进行Java中守护线程的分析及使用”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“如何进行J...
    99+
    2023-06-26
  • PHP如何解决swoole守护进程Redis假死 ,mysql断线重连问题?
    PHP如何解决swoole守护进程Redis假死 ,mysql断线重连问题? 最近公司有个项目,要举办一个线上活动,我这边负责提供接口记录用户访问记录,与操作记录,由于活动参与人数可能比较多...
    99+
    2023-09-03
    php swoole redis
  • 如何进行高性能JavaScript DOM编程以及重排与重绘
    这篇文章给大家介绍如何进行高性能JavaScript DOM编程以及重排与重绘,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。我们知道,DOM是用于操作XML 和HTML文档的应用程序接...
    99+
    2024-04-02
  • 如何设置linux服务器进程监控及自动重启
    本篇内容主要讲解“如何设置linux服务器进程监控及自动重启”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何设置linux服务器进程监控及自动重启”吧!  首先我们要向crontab加入一个新...
    99+
    2023-06-13
  • 如何从Thread和Runnable接口以及Callable方面来创建线程
    这篇文章将为大家详细讲解有关如何从Thread和Runnable接口以及Callable方面来创建线程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。我是线程...
    99+
    2024-04-02
  • CentOS5.3安装Oracle过程讲解以及如何创建软件账户
    本篇文章给大家分享的是有关CentOS5.3安装Oracle过程讲解以及如何创建软件账户,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。经过长时间学习CentOS5.3安装Ora...
    99+
    2023-06-16
  • 如何使用Java API创建和编辑文件以及通过IDE进行调试?
    Java作为一种强大的编程语言,它提供了许多API来帮助开发人员更加方便地进行编程。其中,Java API中的文件操作API可以帮助我们在Java程序中创建、读取、编辑、删除文件等操作。在本文中,我们将介绍如何使用Java API创建和编...
    99+
    2023-10-12
    api 文件 ide
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作