go语言os.exit(1)_Go语言os包用法简述
os标准包,是一个比较重要的包,顾名思义,主要是在服务器上进行系统的基本操作,如文件操作,目录操作,执行命令,信号与中断,进程,系统状态等等。在os包下,有exec,signal,user三个子包。
启动外部命令和程序
在os包中,有很多有趣的功能,比如可以通过变量Args来获取命令参数,os.Args返回一个字符串数组。fmt.Println(os.Args)
在os包中,相关函数名字和作用有较重的Unix风,比如:funcChdir(dirstring)error//chdir将当前工作目录更改为dir目录
funcGetwd()(dirstring,errerror)//获取当前目录
funcChmod(namestring,modeFileMode)error//更改文件的权限
funcChown(namestring,uid,gidint)error//更改文件拥有者owner
funcChtimes(namestring,atimetime.Time,mtimetime.Time)errorfuncClearenv()//清除所有环境变量(慎用)
funcEnviron()[]string//返回所有环境变量
funcExit(codeint)//系统退出,并返回code,其中0表示执行成功并退出,非0表示错误并退出
在os包中,有关文件的处理也有很多方法,如:funcCreate(namestring)(fileFile,errerror)//Create采用模式0666创建一个名为name的文件,如果文件已存在会截断它(为空文件)
funcOpen(namestring)(fileFile,errerror)//Open打开一个文件用于读取。
func(fFile)Stat()(fiFileInfo,errerror)//Stat返回描述文件f的FileInfo类型值
func(fFile)Readdir(nint)(fi[]FileInfo,errerror)//Readdir读取目录f的内容,返回一个有n个成员的[]FileInfo
func(fFile)Read(b[]byte)(nint,errerror)//Read方法从f中读取最多len(b)字节数据并写入b
func(fFile)WriteString(sstring)(retint,errerror)//向文件中写入字符串
func(fFile)Sync()(errerror)//Sync递交文件的当前内容进行稳定的存储。
func(fFile)Close()error//Close关闭文件f
有关文件的处理,将在《Go语言文件处理》一章中详细说明。
在os包中有一个StartProcess函数可以调用或启动外部系统命令和二进制可执行文件;它的第一个参数是要运行的进程,第二个参数用来传递选项或参数,第三个参数是含有系统环境基本信息的结构体。
这个函数返回被启动进程的id(pid),或者启动失败返回错误。
packagemainimport("fmt""os")funcmain(){//1)os.StartProcess///*********************//*Linux:*/env:=os.Environ()procAttr:=&os.ProcAttr{Env:env,Files:[]*os.File{os.Stdin,os.Stdout,os.Stderr,},}//1stexample:listfilesPid,err:=os.StartProcess("/bin/ls",[]string{"ls","-l"},procAttr)iferr!=nil{fmt.Printf("Error%vstartingprocess!",err)//os.Exit(1)}fmt.Printf("Theprocessidis%v",pid)}
os/signal信号处理
一个运行良好的程序在退出(正常退出或者强制退出,如ctrl+c,kill等)时是可以执行一段清理代码,将收尾工作做完后再真正退出。一般采用系统Signal来通知系统退出,如killpid。在程序中针对一些系统信号设置了处理函数,当收到信号后,会执行相关清理程序或通知各个子进程做自清理。
Go语言的系统信号处理主要涉及os包、os.signal包以及syscall包。其中最主要的函数是signal包中的Notify函数:funcNotify(cchan
该函数会将进程收到的系统Signal转发给channelc。如果没有传入sig参数,那么Notify会将系统收到的所有信号转发给channelc。
Notify会根据传入的os.Signal,监听对应Signal信号,Notify()方法会将接收到对应os.Signal往一个channelc中发送。
下面代码以syscall.SIGUSR2信息为例,说明了具体实现:
packagemainimport("fmt""os""os/signal""syscall""time")funcmain(){gosignalListen()for{time.Sleep(10*time.Second)}}funcsignalListen(){c:=make(chanos.Signal)signal.Notify(c,syscall.SIGUSR2)for{s:=
go语言os.exit(1)_Go语言os包用法简述相关推荐
- go语言os.exit(1)_Go语言-信号os.Interrupt和信号syscall.SIGTERM的应用
实例 package main import( "fmt" "os" "os/signal" "sync" " ...
- go语言开发环境搭建_GO语言开发环境搭建
go语言支持以下系统 1.Linux 2.FreeBSD 3.Mac OS X(也称为 Darwin) 4.Windows 本文以Linux系统进行展开 安装包下载地址: https://golang ...
- go语言支持继承吗_Go语言的结构体嵌入为什么不算继承?
今日端午节,又是高考.祝大家节日快乐,祝考生考出好成绩,大家开车请勿鸣笛! 面向对象的设计思想,是根据现实世界进行抽象得出的一套理论.既然是现实世界的抽象,继承的本质是有"父子"关 ...
- go语言os.exit(1)_在Golang中各种永远阻塞的姿势
在Golang中各种永远阻塞的姿势 Go的运行时的当前设计,假定程序员自己负责检测何时终止一个goroutine以及何时终止该程序. 可以通过调用os.Exit或从main()函数的返回来以正常方式终 ...
- Go语言自学系列 | golang标准库os包和环境相关的方法
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang标准库os模块 - 文件目录相关
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,请移步至知乎网站,谢 ...
- go var type 互转_Go语言学习笔记(第九章) 结构体
Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go 通过类型别名(alias types)和结构体的形式支持用户自定义 ...
- C语言 exit 函数 - C语言零基础入门教程
目录 一.exit 函数简介 二.exit 函数使用 三.exit 函数和 return 区别 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础 ...
- sha256算法_Go语言实现Pow共识算法
作者: 张详,闫思 来源: IDCU PoW呢...Proof of Work ,工作量证明机制,可能这个名字大家不熟悉,说比特币的话,大家就熟悉了.没错,PoW就是比特币所使用的共识机制. 通过计算 ...
最新文章
- 机器学习神器Scikit-Learn保姆教程!
- jQuery Mobile发展新闻阅读器,适应iphone和android打电话
- 如何从命令行重新加载.bash_profile?
- WKWebView之cookie请求
- 【收藏】快速排查无线AP故障的十种方法
- Scala 学习笔记(2)
- 深度学习网络backbone?head、neck、bottleneck、GAP、Embedding、pretext task、downstream task、temperature parameter
- 【小白学习C++ 教程】十三、C++命名空间namespace
- mysql2012用户名_SQL Server 登录名、服务器角色、用户名和数据库角色 --- 解释
- python编程(你的电脑能够执行多少线程和进程)
- 解决远程连接mysql很慢的方法
- 老鸟的Python新手教程
- 互联网晚报 | 11月10日 星期三 | 华为捐赠欧拉开源操作系统;微信支持导出个人信息;12306上线铁水联运服务...
- 前端别再错过2022的金三银四了。。
- Vue+ .netcore3.1 模拟QQ邮箱发送验证码
- matlab对于处理数字图像的优点,学习MATLAB数字图像处理经验谈
- 1.1机器学习和深度学习综述(百度架构师手把手带你零基础实践深度学习原版笔记系列)
- stm32 + RN8209C单相计量芯片使用心得
- 面试自我介绍范文(30篇)
- HTML 怎么取消文本框的输入时的边框?
热门文章
- 【Kafka】kafka NotLeaderForPartitionException thisserver is not the leader for topic-partition
- JVM :执行jinfo命令报错Can't attach symbolicator to the process
- java : NoSuchMethodError: org.codehaus.jackson.JsonNode.asInt()
- Netty : 臭名昭著的JDK的NIO bug(空轮询bug)
- 【Hbase】命令行load数据文件到Hbase
- 面试前准备这些,成功率会大大提升!(Java篇)
- 某厂面试归来,发现自己落伍了!
- mysql数据库数字类型_Mysql 数据库数值类型详解
- Docker上安装运行Hbase
- Mybatis-plus的相关文章