So starten Sie einen anderen Befehl in einem Ruby-Programm.
Schreibe hauptsächlich über popen
Geben Sie den Befehl an die Funktion system () als Zeichenfolge. Das einfachste.
sys0.rb
system("ls")
Wenn du rennst
ruby sys0.rb
a.txt b.txt c.txt sys0.rb sys1.rb sys2.rb
sys1.rb
system("ls *.txt")
Wenn du rennst
ruby sys1.rb
a.txt b.txt c.txt
Der Exit-Status (Exit-Status) kann mit $?
Abgerufen werden
sys2.rb
system("ls abc")
print $?, "\n"
Wenn du rennst
ruby sys2.rb
ls: cannot access abc: No such file or directory pid 13715 exit 2
Es ist mit dem Exit-Status 2 fehlgeschlagen.
Sie können die Ausgabe des ausgeführten Befehls abrufen und eingeben (untergeordneter Prozess). Kurz gesagt, Sie können in die Standardeingabe / -ausgabe lesen / schreiben.
popen0.rb
IO.popen("ls","r") do | io |
while io.gets do
print
end
end
Wenn du rennst
ruby popen0.rb
a.txt b.txt c.txt popen0.rb sys0.rb sys1.rb sys2.rb
popen1.rb
IO.popen("grep e","r+") do | io |
io.print "Hello,\n"
io.print "World!\n"
io.close_write
while io.gets do
print
end
end
Wenn du rennst
ruby popen1.rb
Hello,
fork0.rb
print "Start!\n"
child_pid = fork do
#Nur untergeordnete Prozesse unten
print "I am a child. pid=", Process.pid, "\n"
sleep(1)
#Es werden nur untergeordnete Prozesse ausgeführt
end
#Nur der übergeordnete Prozess unten
print "I am a parent. my pid=", Process.pid, ", my child's pid=", child_pid, "\n"
Process.waitpid(child_pid) #Warten Sie, bis der untergeordnete Prozess abgeschlossen ist
Wenn du rennst
ruby fork0.rb
Start! I am a parent. my pid=25527, my child's pid=25529 I am a child. pid=25529
fork1.rb
print "Start!\n"
child_pid = fork do
#Nur untergeordnete Prozesse unten
exec("ls")
#Es werden nur untergeordnete Prozesse ausgeführt
#Wird unten nicht ausgeführt
abc()
#Wird nicht ausgeführt
end
#Nur der übergeordnete Prozess unten
print "I am a parent. my pid=", Process.pid, ", my child's pid=", child_pid, "\n"
Process.waitpid(child_pid) #Warten Sie, bis der untergeordnete Prozess abgeschlossen ist
Wenn du rennst
ruby fork1.rb
Start! I am a parent. my pid=25801, my child's pid=25803 a.txt b.txt c.txt fork0.rb fork1.rb popen0.rb popen1.rb sys0.rb sys1.rb sys2.rb
Recommended Posts