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 ...
随机推荐
- Linux 检测 tls
检测 tls # openssl s_client -connect intl.jdair.net: -tls1
- shell 四则运算
test.sh #/bin/bash read -p "请输入第一个数:" a read -p "请输入第二个数:" b if [ $a -gt $b ] th ...
- 保存tensor至本地文件
path_temp = '../m39_data/temp3' #文件目录 file_name = os.path.join(path_temp, "setQ.txt") Q = ...
- 数据结构之LinkList
1.结构: 2.Link代码: public class Link { public int iData; public double dData; public Link next; public ...
- 【Gamma】Scrum Meeting 3
目录 写在前面 进度情况 任务进度表 Gamma阶段燃尽图 照片 写在前面 例会时间:5.27 22:30-23:30 例会地点:微信群语音通话 代码进度记录github在这里 临近期末,团队成员课程 ...
- Django纪要
Django流程 mvt 创建工程 路由的引导 web 应用程序b发送请求 -->uwsgi-->Django框架-->接收请求处理业务逻辑返回响应-->b本质 接收请求 业务 ...
- R3300L按reset键无法进入USB Burning模式的问题分析
最开始并没有注意到这个问题, 因为从设备拿到手, 用USB Burning Tool刷入潜龙版的安卓4.4.2, 再到运行EmuELEC, Armbian, 再到给Kernel 5.3的Armbian ...
- C# RSA 无 长度限制 加密解密 示例
RSA 是一种非对称加密算法.由于算法特性,加密和解密过程用不同密钥,即公钥和私钥,而被广泛应用于数字证书的安全管理. 在具体应用中,公钥用加密而私钥用于解密,或 私钥用于数字签名而公钥用于签名验证. ...
- hive函数 get_json_object
pandas和SQL数据分析实战 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&sha ...
- chmod: changing permissions of ‘/etc/fstab': Read-only file system
给passwd文件加权限,修改/etc/fstab目录下所有的文件夹属性为可写可读可执行,执行以下命令:chomd 777 /etc/fstab 的时候提示错误: chmod: changing pe ...