Some operating systems retain the status of terminated child processes until the parent collects that status (normally using some variant of wait()
). If the parent never collects this status, the child stays around as a zombie process. Process::detach
prevents this by setting up a separate Ruby thread whose sole job is to reap the status of the process pid when it terminates. Use detach
only when you do not intend to explicitly wait for the child to terminate.
The waiting thread returns the exit status of the detached process when it terminates, so you can use Thread#join
to know the result. If specified pid is not a valid child process ID, the thread returns nil
immediately.
The waiting thread has pid
method which returns the pid.
In this first example, we don’t reap the first child process, so it appears as a zombie in the process status display.
p1 = fork { sleep 0.1 } p2 = fork { sleep 0.2 } Process.waitpid(p2) sleep 2 system("ps -ho pid,state -p #{p1}")
produces:
27389 Z
In the next example, Process::detach
is used to reap the child automatically.
p1 = fork { sleep 0.1 } p2 = fork { sleep 0.2 } Process.detach(p1) Process.waitpid(p2) sleep 2 system("ps -ho pid,state -p #{p1}")
(produces no output)
Detach the process from controlling terminal and run in the background as system daemon. Unless the argument nochdir is true (i.e. non false), it changes the current working directory to the root (“/”). Unless the argument noclose is true, daemon() will redirect standard input, standard output and standard error to /dev/null. Return zero on success, or raise one of Errno::*.
Add the –update-sources option
Raises a MissingAttributeError
, NotAvailableValueError
, MissingTagError
or NotExpectedTagError
if the element is not properly formatted.
Returns a Hash
containing the following keys:
Number of started SSL/TLS handshakes in server mode
Number of established SSL/TLS sessions in server mode
Number of start renegotiations in server mode
Number of sessions that were removed due to cache overflow
Number of successfully reused connections
Number of sessions proposed by clients that were not found in the cache
Number of sessions in the internal session cache
Number of sessions retrieved from the external cache in server mode
Number of started SSL/TLS handshakes in client mode
Number of established SSL/TLS sessions in client mode
Number of start renegotiations in client mode
Number of sessions proposed by clients that were found in the cache but had expired due to timeouts
Takes the first digit of the reply code to determine the status type
Indicated whether this Cipher
instance uses an Authenticated Encryption mode.
pass
- string
name
- A string describing the key.
key
- Any PKey
.
cert
- A X509::Certificate
.
The public_key portion of the certificate must contain a valid public key.
The not_before and not_after fields must be filled in.
ca
- An optional array of X509::Certificate
‘s.
key_pbe
- string
cert_pbe
- string
key_iter
- integer
mac_iter
- integer
keytype
- An integer representing an MSIE specific extension.
Any optional arguments may be supplied as nil to preserve the OpenSSL
defaults.
See the OpenSSL
documentation for PKCS12_create().
returns the timestamp as a time object.
ancillarydata should be one of following type:
SOL_SOCKET/SCM_TIMESTAMP (microsecond) GNU/Linux, FreeBSD, NetBSD, OpenBSD, Solaris, MacOS X
SOL_SOCKET/SCM_TIMESTAMPNS (nanosecond) GNU/Linux
SOL_SOCKET/SCM_BINTIME (2**(-64) second) FreeBSD
Addrinfo.udp
(“127.0.0.1”, 0).bind {|s1|
Addrinfo.udp("127.0.0.1", 0).bind {|s2| s1.setsockopt(:SOCKET, :TIMESTAMP, true) s2.send "a", 0, s1.local_address ctl = s1.recvmsg.last p ctl #=> #<Socket::AncillaryData: INET SOCKET TIMESTAMP 2009-02-24 17:35:46.775581> t = ctl.timestamp p t #=> 2009-02-24 17:35:46 +0900 p t.usec #=> 775581 p t.nsec #=> 775581000 }
}
Returns the broadcast address of ifaddr. nil is returned if the flags doesn’t have IFF_BROADCAST.
Returns the destination address of ifaddr. nil is returned if the flags doesn’t have IFF_POINTOPOINT.
Compresses the given string
. Valid values of level are Zlib::NO_COMPRESSION, Zlib::BEST_SPEED, Zlib::BEST_COMPRESSION, Zlib::DEFAULT_COMPRESSION, or an integer from 0 to 9.
This method is almost equivalent to the following code:
def deflate(string, level) z = Zlib::Deflate.new(level) dst = z.deflate(string, Zlib::FINISH) z.close dst end
See also Zlib.inflate