读《The Ruby Way》之运行外部程序

本文详细解析了Ruby中用于调用外部程序的三种方法:system、exec与重音符(`),并解释了它们各自的特性与应用场景。此外,还介绍了fork、wait、waitpid等进程管理方法,以及如何通过这些方法来创建、等待和管理子进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

西班牙输了,这次世界杯强队的表现真是没话可说了。

Ruby里调用外部程序的方法有三种,[b]system[/b]、[b]exec[/b]、[b]重音符(`)[/b]。
先看一下[b]system[/b]
# Linux
system("rm", "/tmp/file1")
system("rm /tmp/file2")
system("ls -l | hea -n l")

# Windows
system("notepad.exe", "myfile.txt")
system("cmd /c dir", "somefile")

system是无法捕获外部命令的输出的。
[b]exec[/b]和system很像,但是exec后边的代码是不会被执行的。
[b]重音符(`)[/b],是可以捕获外部命令输出的,也可以写成[b]%x[/b]的形式。
listing = `ls -l`
now = `date`
listing = %x(ls -l)
now = %x(date)

可以使用[b]fork[/b]方法创建新进程,wait和wait2方法用来等待子进程的返回,waitpid和waitpid2可以等待特定的子进程。Windows不支持fork。
pid1 = ford { sleep 5; exit 3 }
pid2 = ford { sleep 2; exit 3 }

Process.wait # 返回 pid2
Process.wait2 # 返回 [pid1, 768],768是经过左偏移的退出状态

pid3 = ford { sleep 5; exit 3 }
pid4 = ford { sleep 2; exit 3 }

Process.waitpid(pid4, Process::WHOHANG) # 返回 pid4
Process.waitpid2(pid3, Process::WHOHANG) # 返回 [pid3, 768]

pid和ppid分别返回当前进程及其父进程的进程ID。可以用kill方法将UNIX式信号发送给进程。
Process.kill(1, pid1)        # 把信号1送给pid1
Process.kill("HUP", pid2) # 把信号HUP送给pid2
Process.kill("SIGHUP", pid3) # 把信号SIGHUP送给pid3
Process.kill("SIGHUP", 0) # 把信号SIGHUP送给自己
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值