หากคุณมีกรณีที่มีความซับซ้อนกว่ากรณีทั่วไปที่ไม่สามารถจัดการกับการแล้วตรวจสอบ``
Kernel.spawn()
นี่น่าจะเป็นคุณสมบัติทั่วไป / เต็มรูปแบบที่จัดทำโดยหุ้นของ Ruby เพื่อดำเนินการคำสั่งภายนอก
คุณสามารถใช้มันเพื่อ:
- สร้างกลุ่มกระบวนการ (Windows)
- เปลี่ยนเส้นทางใน, ออก, ข้อผิดพลาดไปยังไฟล์ / กันและกัน
- ตั้งค่า env vars, umask
- เปลี่ยนไดเรกทอรีก่อนดำเนินการคำสั่ง
- กำหนดขีด จำกัด ทรัพยากรสำหรับ CPU / data / etc
- ทำทุกอย่างที่สามารถทำได้ด้วยตัวเลือกอื่นในคำตอบอื่น ๆ แต่ด้วยรหัสเพิ่มเติม
เอกสารทับทิมมีตัวอย่างที่ดีพอ:
env: hash
name => val : set the environment variable
name => nil : unset the environment variable
command...:
commandline : command line string which is passed to the standard shell
cmdname, arg1, ... : command name and one or more arguments (no shell)
[cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell)
options: hash
clearing environment variables:
:unsetenv_others => true : clear environment variables except specified by env
:unsetenv_others => false : dont clear (default)
process group:
:pgroup => true or 0 : make a new process group
:pgroup => pgid : join to specified process group
:pgroup => nil : dont change the process group (default)
create new process group: Windows only
:new_pgroup => true : the new process is the root process of a new process group
:new_pgroup => false : dont create a new process group (default)
resource limit: resourcename is core, cpu, data, etc. See Process.setrlimit.
:rlimit_resourcename => limit
:rlimit_resourcename => [cur_limit, max_limit]
current directory:
:chdir => str
umask:
:umask => int
redirection:
key:
FD : single file descriptor in child process
[FD, FD, ...] : multiple file descriptor in child process
value:
FD : redirect to the file descriptor in parent process
string : redirect to file with open(string, "r" or "w")
[string] : redirect to file with open(string, File::RDONLY)
[string, open_mode] : redirect to file with open(string, open_mode, 0644)
[string, open_mode, perm] : redirect to file with open(string, open_mode, perm)
[:child, FD] : redirect to the redirected file descriptor
:close : close the file descriptor in child process
FD is one of follows
:in : the file descriptor 0 which is the standard input
:out : the file descriptor 1 which is the standard output
:err : the file descriptor 2 which is the standard error
integer : the file descriptor of specified the integer
io : the file descriptor specified as io.fileno
file descriptor inheritance: close non-redirected non-standard fds (3, 4, 5, ...) or not
:close_others => false : inherit fds (default for system and exec)
:close_others => true : dont inherit (default for spawn and IO.popen)