Go基础编程实践(八)—— 系统编程
捕捉信号
// 运行此程序,控制台将打印"Waiting for signal"
// 按Ctrl + C 发送信号以关闭程序,将发生中断
// 随后控制台依次打印"Signal .."、"Exiting..."
package main
import (
    "os"
    "os/signal"
    "syscall"
    "fmt"
)
func main() {
    // 缓冲通道捕捉信号
    signals := make(chan os.Signal, 1)
    done := make(chan bool)
    // Notify将输入信号转发到channel
    signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
    go func() {
        sig := <- signals
        fmt.Println(sig)
        fmt.Println("Signal captured and processed...")
        done <- true
    }()
    fmt.Println("Waiting for signal")
    <- done
    fmt.Println("Exiting the application...")
}
运行子进程
// 在Go程序中运行其他进程
package main
import (
    "os/exec"
    "fmt"
)
func main() {
    // Command接收两个参数:命令、命令参数
   // lsCommand := exec.Command("ls", "-a")
    lsCommand := exec.Command("ls")
    // Output执行命令并返回标准输出的切片。
    output, _ := lsCommand.Output()
    //Run函数阻塞进程直到lsCommand执行完毕,与之类似到Start函数不阻塞
    lsCommand.Run()
    // 获取进程ID
    fmt.Println(lsCommand.Process.Pid)
    // 获取ls命令结果
    fmt.Println(string(output))
}
处理命令行参数
package main
import (
    "os"
    "fmt"
)
func main() {
    // os.Args的第一个元素是可执行文件路径,所以获取参数从下标1开始
    realArgs := os.Args[1:]
    if len(realArgs) == 0 {
        fmt.Println("Please pass an argument.")
        return
    }
    if realArgs[0] == "a" {
        writeHelloWorld()
    } else if realArgs[0] == "b" {
        writeHelloMars()
    } else {
        fmt.Println("Please pass a valid argument.")
    }
}
func writeHelloWorld() {
    fmt.Println("Hello, World!")
}
func writeHelloMars() {
    fmt.Println("Hello, Mars!")
}
// 执行"go run main.go a"将输出"Hello, World!"
// 执行"go run main.go b"将输出"Hello, Mars!"
												
											Go基础编程实践(八)—— 系统编程的更多相关文章
- Linux高并发网络编程开发——10-Linux系统编程-第10天(网络编程基础-socket)
		
在学习Linux高并发网络编程开发总结了笔记,并分享出来.有问题请及时联系博主:Alliswell_WP,转载请注明出处. 10-Linux系统编程-第10天(网络编程基础-socket) 在学习Li ...
 - Socket编程实践(12) --UDP编程基础
		
UDP特点 无连接,面向数据报(基于消息,不会粘包)的传输数据服务; 不可靠(可能会丢包, 乱序, 反复), 但因此普通情况下UDP更加高效; UDP客户/服务器模型 UDP-API使用 #inclu ...
 - Socket编程实践(2) --Socket编程导引
		
什么是Socket? Socket可以看成是用户进程与内核网络协议栈的接口(编程接口, 如下图所示), 其不仅可以用于本机进程间通信,可以用于网络上不同主机的进程间通信, 甚至还可以用于异构系统之间的 ...
 - 第二章  C语言编程实践
		
上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...
 - LINUX系统编程  由REDIS的持久化机制联想到的子进程退出的相关问题
		
19:22:01 2014-08-27 引言: 以前对wait waitpid 以及exit这几个函数只是大致上了解,但是看REDIS的AOF和RDB 2种持久化时 均要处理子进程运行完成退出和父进程 ...
 - 【转载】使用C#进行系统编程
		
原文:使用C#进行系统编程 虽然对于系统编程(System programming)的定义很模糊,不过可以将其描述为在比特.字节.指令,或CPU周期层面所进行的思考.系统编程这个概念也暗含了对性能和可 ...
 - C语言嵌入式系统编程修炼之一:背景篇
		
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...
 - C语言嵌入式系统编程修炼
		
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...
 - 2018.3.5   Java语言基础与面向对象编程实践
		
Java语言基础与面向对象编程实践 第一章 初识Java 1.Java特点 http://www.manew.com/blog-166576-20164.html Java语言面向对象的 Java语言 ...
 - JavaScript八张思维导图—编程实践
		
JS基本概念 JS操作符 JS基本语句 JS数组用法 Date用法 JS字符串用法 JS编程风格 JS编程实践 不知不觉做前端已经五年多了,无论是从最初的jQuery还是现在火热的Angular,Vu ...
 
随机推荐
- Anniversary party(hdu1520)(poj2342)题解
			
原题地址:http://poj.org/problem?id=2342 题目大意: 上司和下属不能同时参加派对,求参加派对的最大活跃值. 关系满足一棵树,每个人都有自己的活跃值(-128~127) 求 ...
 - 设置Git--在Git中设置您的用户名--创建一个回购--Fork A Repo--社会化
			
设置Git GitHub的核心是名为Git的开源版本控制系统(VCS).Git负责计算机上本地发生的所有GitHub相关的事情. 要在命令上使用Git,您需要在计算机上下载,安装和配置Git. 如果要 ...
 - GoCN每日新闻(2019-10-30)
			
GoCN每日新闻(2019-10-30) GoCN每日新闻(2019-10-30) 1. Asta Xie: 玩转Go语言,从beego开始 https://mp.weixin.qq.com/s/Io ...
 - svn报错:[Previous operation has not finished; run 'cleanup' if it was interrupted] 的排错过程
			
今天在打开某一文档的情况下,使用SVN更新文档,在更新的过程中报错,提示需要执行clean up,果断右键执行clean up,又提示一个新的错误:"Previous operation h ...
 - ModuleNotFoundError: No module named 'rest_framework_swagger'
			
pip3.6 install django-rest-swagger
 - 倍增&矩阵乘法 专题复习
			
倍增&矩阵乘法 专题复习 PreWords 这两个基础算法我就不多说啦,但是还是要介绍一下" 广义矩阵 "乘法 其实就是把矩阵换成取\(max\),然后都一样... 据神仙 ...
 - fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img
			
一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和kernel都是二进制,rootfs存在文件系统. 二进制在烧录的时候比较简单,将二进制数据写入存储设备固定地址: ...
 - 工具系列 | Docker基本概念
			
1.什么是docker? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化. ...
 - sublime px转rem的方法【亲测有效】
			
在开发手机网站的时候,我们经常会用到rem来作为单位,但是手动转rem太麻烦了,那么怎么办呢?sublime安装cssrem来进行快捷操作. 安装过程: 第一步:去git上克隆 https://git ...
 - aardio类的例子
			
论坛里面相关资料太少,这里贴一下 库需要在工程的lib目录下,在ide里面就是用户库目录,比如 my_lib namespace my_lib{ import console class MyLibC ...