D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
proc
/
self
/
root
/
opt
/
alt
/
ruby34
/
share
/
ri
/
system
/
Process
/
Filename :
waitpid-c.ri
back
Copy
U:RDoc::AnyMethod[iI"waitpid:ETI"Process::waitpid;TT:publico:RDoc::Markup::Document:@parts[o:RDoc::Markup::Paragraph; [ I"IWaits for a suitable child process to exit, returns its process ID, ;TI"6and sets <tt>$?</tt> to a Process::Status object ;TI"-containing information on that process. ;TI"FWhich child it waits for depends on the value of the given +pid+:;To:RDoc::Markup::BlankLine o:RDoc::Markup::List: @type:BULLET:@items[ o:RDoc::Markup::ListItem:@label0; [o; ; [I"MPositive integer: Waits for the child process whose process ID is +pid+:;T@o:RDoc::Markup::Verbatim; [I"?pid0 = Process.spawn('ruby', '-e', 'exit 13') # => 230866 ;TI"?pid1 = Process.spawn('ruby', '-e', 'exit 14') # => 230891 ;TI"?Process.wait(pid0) # => 230866 ;TI"_$? # => #<Process::Status: pid 230866 exit 13> ;TI"?Process.wait(pid1) # => 230891 ;TI"_$? # => #<Process::Status: pid 230891 exit 14> ;TI"JProcess.wait(pid0) # Raises Errno::ECHILD ;T:@format0o;;0; [o; ; [I"<<tt>0</tt>: Waits for any child process whose group ID ;TI"0is the same as that of the current process:;T@o;; [I"1parent_pgpid = Process.getpgid(Process.pid) ;TI"8puts "Parent process group ID is #{parent_pgpid}." ;TI"child0_pid = fork do ;TI", puts "Child 0 pid is #{Process.pid}" ;TI"2 child0_pgid = Process.getpgid(Process.pid) ;TI"M puts "Child 0 process group ID is #{child0_pgid} (same as parent's)." ;TI" end ;TI"child1_pid = fork do ;TI", puts "Child 1 pid is #{Process.pid}" ;TI"' Process.setpgid(0, Process.pid) ;TI"2 child1_pgid = Process.getpgid(Process.pid) ;TI"T puts "Child 1 process group ID is #{child1_pgid} (different from parent's)." ;TI" end ;TI"%retrieved_pid = Process.wait(0) ;TI"Qputs "Process.wait(0) returned pid #{retrieved_pid}, which is child 0 pid." ;TI"begin ;TI" Process.wait(0) ;TI"rescue Errno::ECHILD => x ;TI"h puts "Raised #{x.class}, because child 1 process group ID differs from parent process group ID." ;TI" end ;T;0o; ; [I"Output:;T@o;; [I"(Parent process group ID is 225764. ;TI"Child 0 pid is 225788 ;TI"<Child 0 process group ID is 225764 (same as parent's). ;TI"Child 1 pid is 225789 ;TI"CChild 1 process group ID is 225789 (different from parent's). ;TI"@Process.wait(0) returned pid 225788, which is child 0 pid. ;TI"bRaised Errno::ECHILD, because child 1 process group ID differs from parent process group ID. ;T;0o;;0; [o; ; [I"8<tt>-1</tt> (default): Waits for any child process:;T@o;; [I"1parent_pgpid = Process.getpgid(Process.pid) ;TI"8puts "Parent process group ID is #{parent_pgpid}." ;TI"child0_pid = fork do ;TI", puts "Child 0 pid is #{Process.pid}" ;TI"2 child0_pgid = Process.getpgid(Process.pid) ;TI"M puts "Child 0 process group ID is #{child0_pgid} (same as parent's)." ;TI" end ;TI"child1_pid = fork do ;TI", puts "Child 1 pid is #{Process.pid}" ;TI"' Process.setpgid(0, Process.pid) ;TI"2 child1_pgid = Process.getpgid(Process.pid) ;TI"T puts "Child 1 process group ID is #{child1_pgid} (different from parent's)." ;TI"C sleep 3 # To force child 1 to exit later than child 0 exit. ;TI" end ;TI"+child_pids = [child0_pid, child1_pid] ;TI"&retrieved_pid = Process.wait(-1) ;TI"-puts child_pids.include?(retrieved_pid) ;TI"&retrieved_pid = Process.wait(-1) ;TI"-puts child_pids.include?(retrieved_pid) ;T;0o; ; [I"Output:;T@o;; [I"(Parent process group ID is 228736. ;TI"Child 0 pid is 228758 ;TI"<Child 0 process group ID is 228736 (same as parent's). ;TI"Child 1 pid is 228759 ;TI"CChild 1 process group ID is 228759 (different from parent's). ;TI" true ;TI" true ;T;0o;;0; [o; ; [I"XLess than <tt>-1</tt>: Waits for any child whose process group ID is <tt>-pid</tt>:;T@o;; [I"1parent_pgpid = Process.getpgid(Process.pid) ;TI"8puts "Parent process group ID is #{parent_pgpid}." ;TI"child0_pid = fork do ;TI", puts "Child 0 pid is #{Process.pid}" ;TI"2 child0_pgid = Process.getpgid(Process.pid) ;TI"M puts "Child 0 process group ID is #{child0_pgid} (same as parent's)." ;TI" end ;TI"child1_pid = fork do ;TI", puts "Child 1 pid is #{Process.pid}" ;TI"' Process.setpgid(0, Process.pid) ;TI"2 child1_pgid = Process.getpgid(Process.pid) ;TI"T puts "Child 1 process group ID is #{child1_pgid} (different from parent's)." ;TI" end ;TI" sleep 1 ;TI"/retrieved_pid = Process.wait(-child1_pid) ;TI"[puts "Process.wait(-child1_pid) returned pid #{retrieved_pid}, which is child 1 pid." ;TI"begin ;TI"! Process.wait(-child1_pid) ;TI"rescue Errno::ECHILD => x ;TI"h puts "Raised #{x.class}, because there's no longer a child with process group id #{child1_pid}." ;TI" end ;T;0o; ; [I"Output:;T@o;; [I"(Parent process group ID is 230083. ;TI"Child 0 pid is 230108 ;TI"<Child 0 process group ID is 230083 (same as parent's). ;TI"Child 1 pid is 230109 ;TI"CChild 1 process group ID is 230109 (different from parent's). ;TI"JProcess.wait(-child1_pid) returned pid 230109, which is child 1 pid. ;TI"[Raised Errno::ECHILD, because there's no longer a child with process group id 230109. ;T;0o; ; [I"IArgument +flags+ should be given as one of the following constants, ;TI""or as the logical OR of both:;T@o;; ;;[o;;0; [o; ; [I"GProcess::WNOHANG: Does not block if no child process is available.;To;;0; [o; ; [I"VProcess::WUNTRACED: May return a stopped child process, even if not yet reported.;T@o; ; [I"2Not all flags are available on all platforms.;T@o; ; [I"@Raises Errno::ECHILD if there is no suitable child process.;T@o; ; [I"$Not available on all platforms.;T@o; ; [I"2Process.waitpid is an alias for Process.wait.;T: @fileI"process.c;T:0@omit_headings_from_table_of_contents_below0I"2Process.wait(pid = -1, flags = 0) -> integer ;T0[ I"(*args);T@�FI"Process;TcRDoc::NormalModule00