衍生外部进程

dateCmd := exec.Command("date")
dateOut, err := dateCmd.Output()
if err != nil {panic(err)
}
fmt.Println("> date")
fmt.Println(string(dateOut))

> date
2022年 4月20日 星期三 19时16分44秒 CST

exec.Command的执行结果,与在命令行中执行的结果一致。

grepCmd := exec.Command("grep", "hello")
grepIn, _ := grepCmd.StdinPipe()
grepOut, _ := grepCmd.StdoutPipe()
grepCmd.Start()
grepIn.Write([]byte("hello grep\ngoodbye grep"))
grepIn.Close()
grepBytes, _ := io.ReadAll(grepOut)
grepCmd.Wait()
fmt.Println("> grep hello")
fmt.Println(string(grepBytes))

> grep hello
hello grep

与上面的代码不同,这里显式地获取输入/输出管道,启动进程,向管道输入数据,读取管道输出,最后等待进程结束。

lsCmd := exec.Command("bash", "-c", "ls -a -l -h")
lsOut, err := lsCmd.Output()
if err != nil {panic(err)
}
fmt.Println("> ls -a -l -h")
fmt.Println(string(lsOut))

> ls -a -l -h
total 3992
drwxr-xr-x 4 baiye staff 128B 4 20 19:16 .
drwxr-xr-x 83 baiye staff 2.6K 4 2 10:38 …
-rwxr-xr-x 1 baiye staff 1.9M 4 20 19:16 spawning-processes
-rw-r–r-- 1 baiye staff 703B 3 28 18:11 spawning-processes.go

生成命令时,需要显式地提供描述的命令和参数数组,不能只传入一个命令行字符串。如果需要执行字符串样式的完整命令,可以使用bash -c选项。

替换当前进程

binary, lookErr := exec.LookPath("ls")
if lookErr != nil {panic(lookErr)
}
args := []string{"ls", "-a", "-l", "-h"}
env := os.Environ()
execErr := syscall.Exec(binary, args, env)
if execErr != nil {panic(execErr)
}

total 3016
drwxr-xr-x 4 baiye staff 128B 4 20 20:20 .
drwxr-xr-x 83 baiye staff 2.6K 4 2 10:38 …
-rwxr-xr-x 1 baiye staff 1.5M 4 20 20:20 execing-processes
-rw-r–r-- 1 baiye staff 300B 3 28 18:53 execing-processes.go

Spawning Processes and Exec‘ing Processes相关推荐

  1. oracle processes修改,修改oracle processes参数过大导致oracle启动不了解决方法

    由于系统偶尔会出现数据库连接异常,页面中已经有了数据库的关连接.后来发现oracle maximum(150) of processes的错误. 后来就将此值加大. 在dos下执行以下命令 C:/Do ...

  2. Golang 随笔杂谈

    最近我迷上了Rust语言和区块链,作为C++入行的我还是很难接受GC类语言,C++程序员对于性能效率有着本能地渴望和追求!但是C++却又过于复杂,令程序员的心智负担过重!而Rust语言的优雅和效率令我 ...

  3. Go by Example

    2019独角兽企业重金招聘Python工程师标准>>> 本文收集了 Go By Example 的示例,并将注释写于代码之上,最后几节参考了其他人的翻译 Github 地址:原版 e ...

  4. 11Grac+ASM+linux2.6.18 processes (100) exceeded

    现象:两个节点的11grac环境,在使用软件做复制时,rac1直接down机,rac2ASM实例重启了一下,然后就好了.但rac1一直没启动 由于rac1一直down机无法登陆上去,所以只好登陆rac ...

  5. PROCESSES, SESSIONS和CONNECTIONS的区别

    From:AskTom You Asked Hi Tom What's the difference between connections, sessions and processes? I re ...

  6. oracle中的open,oracle最常见的三个参数:open_cursors、sessions、processes

    一.open_cursors 1. 检查数据库中的 OPEN_CURSORS 参数值: Oracle 使用 init.ora 中的初始化参数 OPEN_CURSORS 指定一个会话一次最多可以拥有的游 ...

  7. Oracle数据库中processes参数设置

    PROCESSES 为连接Oracle数据库的最大进程数,该值包括了所有后台进程和并发进程.processes参数不建议设置特别大,因为当数据库实例启动时,会预先为每个process分配内存和信号量, ...

  8. 操作系统——Processes 进程

    目录​​​​​​​ 1. 导入--什么是操作系统? Operating System (OS) Operations 2. The notion of a process Process State ...

  9. processes参数修改

    processes:最大连接数 修改参数 show parameter name show paramter processes alter system set processes=6000 sco ...

最新文章

  1. 互联网思维-产品思维(1)
  2. CMakeLists.txt
  3. powerdesigner建立UML活动图
  4. java axis webservice_Axis Webservice框架使用案例
  5. 【JS 逆向百例】某易支付密码 MD5+AES 加密分析
  6. 新浪微博放开140字限制:社交向左 原创向右
  7. Python实现词云图的3种方式(词频,一段文本,自定义样式)
  8. 《系统集成项目管理》第十六章 变更管理
  9. php如何给注册页面加验证码,网站注册页面如何添加验证码注册登录
  10. 宝塔面板干什么用的?
  11. 数量关系-经济利润问题
  12. 2013年十大免费空间综合排行榜-稳定,可靠,速度快,可建站免费空间
  13. 支付宝 ECSHOP 支付接口 PHP
  14. 大二〕一直在寻找 生而为人的意义(转载)
  15. Python利用re正则表达式抓取豆瓣电影Top250排行榜
  16. 我的人格类型是:ESTP(外向,感觉,思维,知觉)
  17. 容联云 实现验证码发送
  18. Linux中创建组的命令,linux创建用户组命令
  19. 无线通信网络优化的自动路测系统设计(Matlab代码实现)
  20. 【通信原理课程设计】基于MATLAB/Simulink的2ASK数字带通传输系统建模与仿真

热门文章

  1. 数据结构之堆(Heap)及其用途
  2. Python学习,第一课(基础知识,利用urllib库入门)
  3. 关于QXDM的安装,解决Win7下QIK报错的问题
  4. Effie 与文字讲缘分,与写作者交朋友
  5. 北京信息科技大学第十一届程序设计竞赛(重现赛)
  6. 程序员面试笔试宝典学习记录(一)(常见面试笔试题目)
  7. 经典.NET面试题目
  8. 使用74LS245驱动8×8LED点阵屏显示数字
  9. linux和数据库day01随堂笔记
  10. 加入收藏js代码 兼容所有浏览器