Ruby  2.0.0p598(2014-11-13revision48408)
Data Structures | Macros | Functions | Variables
process.c File Reference
#include "ruby/ruby.h"
#include "ruby/io.h"
#include "ruby/thread.h"
#include "ruby/util.h"
#include "internal.h"
#include "vm_core.h"
#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <time.h>
#include <ctype.h>
#include "ruby/st.h"
#include <sys/stat.h>
#include "dln.h"

Go to the source code of this file.

Data Structures

struct  wait_data
 
struct  string_part
 
struct  run_exec_dup2_fd_pair
 

Macros

#define EXIT_SUCCESS   0
 
#define EXIT_FAILURE   1
 
#define MAXPATHLEN   1024
 
#define numberof(array)   (int)(sizeof(array)/sizeof((array)[0]))
 
#define WIFEXITED(w)   (((w) & 0xff) == 0)
 
#define WIFSIGNALED(w)   (((w) & 0x7f) > 0 && (((w) & 0x7f) < 0x7f))
 
#define WIFSTOPPED(w)   (((w) & 0xff) == 0x7f)
 
#define WEXITSTATUS(w)   (((w) >> 8) & 0xff)
 
#define WTERMSIG(w)   ((w) & 0x7f)
 
#define WSTOPSIG   WEXITSTATUS
 
#define preserving_errno(stmts)   do {int saved_errno = errno; stmts; errno = saved_errno;} while (0)
 
#define p_uid_from_name   p_uid_from_name
 
#define p_gid_from_name   p_gid_from_name
 
#define PREPARE_GETPWNAM   /* do nothing */
 
#define FINISH_GETPWNAM   /* do nothing */
 
#define OBJ2UID(id)   NUM2UIDT(id)
 
#define p_uid_from_name   rb_f_notimplement
 
#define PREPARE_GETGRNAM   /* do nothing */
 
#define FINISH_GETGRNAM   /* do nothing */
 
#define OBJ2GID(id)   NUM2GIDT(id)
 
#define p_gid_from_name   rb_f_notimplement
 
#define PST2INT(st)   NUM2INT(pst_to_i(st))
 
#define NO_WAITPID
 
#define before_fork()   before_exec()
 
#define after_fork()   (rb_threadptr_pending_interrupt_clear(GET_THREAD()), after_exec())
 
#define try_with_sh(prog, argv, envp)   (void)0
 
#define ARGV_COUNT(n)   ((n)+1)
 
#define ARGV_SIZE(n)   (sizeof(char*) * ARGV_COUNT(n))
 
#define ALLOC_ARGV(n, v)   ALLOCV_N(char*, (v), ARGV_COUNT(n))
 
#define USE_SPAWNV   0
 
#define P_NOWAIT   _P_NOWAIT
 
#define CHILD_ERRMSG_BUFLEN   80
 
#define ERRMSG(str)   do { if (errmsg && 0 < errmsg_buflen) strlcpy(errmsg, (str), errmsg_buflen); } while (0)
 
#define redirect_dup(oldfd)   dup(oldfd)
 
#define redirect_dup2(oldfd, newfd)   dup2((oldfd), (newfd))
 
#define redirect_close(fd)   close(fd)
 
#define redirect_open(pathname, flags, perm)   open((pathname), (flags), (perm))
 
#define rb_f_fork   rb_f_notimplement
 
#define proc_getpgrp   rb_f_notimplement
 
#define proc_setpgrp   rb_f_notimplement
 
#define proc_getpgid   rb_f_notimplement
 
#define proc_setpgid   rb_f_notimplement
 
#define proc_getsid   rb_f_notimplement
 
#define proc_setsid   rb_f_notimplement
 
#define proc_getpriority   rb_f_notimplement
 
#define proc_setpriority   rb_f_notimplement
 
#define proc_getrlimit   rb_f_notimplement
 
#define proc_setrlimit   rb_f_notimplement
 
#define p_sys_setuid   rb_f_notimplement
 
#define p_sys_setruid   rb_f_notimplement
 
#define p_sys_seteuid   rb_f_notimplement
 
#define p_sys_setreuid   rb_f_notimplement
 
#define p_sys_setresuid   rb_f_notimplement
 
#define proc_setuid   rb_f_notimplement
 
#define p_sys_setgid   rb_f_notimplement
 
#define p_sys_setrgid   rb_f_notimplement
 
#define p_sys_setegid   rb_f_notimplement
 
#define p_sys_setregid   rb_f_notimplement
 
#define p_sys_setresgid   rb_f_notimplement
 
#define p_sys_issetugid   rb_f_notimplement
 
#define proc_setgid   rb_f_notimplement
 
#define proc_getgroups   rb_f_notimplement
 
#define proc_setgroups   rb_f_notimplement
 
#define proc_initgroups   rb_f_notimplement
 
#define proc_getmaxgroups   rb_f_notimplement
 
#define proc_setmaxgroups   rb_f_notimplement
 
#define proc_daemon   rb_f_notimplement
 
#define proc_seteuid_m   rb_f_notimplement
 
#define proc_setegid_m   rb_f_notimplement
 
#define rb_proc_times   rb_f_notimplement
 

Functions

static void check_uid_switch (void)
 
static void check_gid_switch (void)
 
static VALUE get_pid (void)
 
static VALUE get_ppid (void)
 
VALUE rb_last_status_get (void)
 
void rb_last_status_set (int status, rb_pid_t pid)
 
void rb_last_status_clear (void)
 
static VALUE pst_to_i (VALUE st)
 
static VALUE pst_pid (VALUE st)
 
static void pst_message (VALUE str, rb_pid_t pid, int status)
 
static VALUE pst_to_s (VALUE st)
 
static VALUE pst_inspect (VALUE st)
 
static VALUE pst_equal (VALUE st1, VALUE st2)
 
static VALUE pst_bitand (VALUE st1, VALUE st2)
 
static VALUE pst_rshift (VALUE st1, VALUE st2)
 
static VALUE pst_wifstopped (VALUE st)
 
static VALUE pst_wstopsig (VALUE st)
 
static VALUE pst_wifsignaled (VALUE st)
 
static VALUE pst_wtermsig (VALUE st)
 
static VALUE pst_wifexited (VALUE st)
 
static VALUE pst_wexitstatus (VALUE st)
 
static VALUE pst_success_p (VALUE st)
 
static VALUE pst_wcoredump (VALUE st)
 
static int wait_each (rb_pid_t pid, int status, struct wait_data *data)
 
static int waitall_each (rb_pid_t pid, int status, VALUE ary)
 
static voidrb_waitpid_blocking (void *data)
 
rb_pid_t rb_waitpid (rb_pid_t pid, int *st, int flags)
 
static VALUE proc_wait (int argc, VALUE *argv)
 
static VALUE proc_wait2 (int argc, VALUE *argv)
 
static VALUE proc_waitall (void)
 
static ID id_pid (void)
 
static VALUE detach_process_pid (VALUE thread)
 
static VALUE detach_process_watcher (void *arg)
 
VALUE rb_detach_process (rb_pid_t pid)
 
static VALUE proc_detach (VALUE obj, VALUE pid)
 
static void before_exec_async_signal_safe (void)
 
static void before_exec_non_async_signal_safe (void)
 
static void before_exec (void)
 
static void after_exec_async_signal_safe (void)
 
static void after_exec_non_async_signal_safe (void)
 
static void after_exec (void)
 
static void security (const char *str)
 
static int proc_exec_cmd (const char *prog, VALUE argv_str, VALUE envp_str)
 
static int proc_exec_v (char **argv, const char *prog)
 
int rb_proc_exec_n (int argc, VALUE *argv, const char *prog)
 
static int proc_exec_sh (const char *str, VALUE envp_str)
 
int rb_proc_exec (const char *str)
 
static void mark_exec_arg (void *ptr)
 
static void free_exec_arg (void *ptr)
 
static size_t memsize_exec_arg (const void *ptr)
 
static VALUE hide_obj (VALUE obj)
 
static VALUE check_exec_redirect_fd (VALUE v, int iskey)
 
static VALUE check_exec_redirect1 (VALUE ary, VALUE key, VALUE param)
 
static void check_exec_redirect (VALUE key, VALUE val, struct rb_execarg *eargp)
 
int rb_execarg_addopt (VALUE execarg_obj, VALUE key, VALUE val)
 
int rb_exec_arg_addopt (struct rb_exec_arg *e, VALUE key, VALUE val)
 
static int check_exec_options_i (st_data_t st_key, st_data_t st_val, st_data_t arg)
 
static int check_exec_options_i_extract (st_data_t st_key, st_data_t st_val, st_data_t arg)
 
static int check_exec_fds_1 (struct rb_execarg *eargp, VALUE h, int maxhint, VALUE ary)
 
static VALUE check_exec_fds (struct rb_execarg *eargp)
 
static void rb_check_exec_options (VALUE opthash, VALUE execarg_obj)
 
VALUE rb_execarg_extract_options (VALUE execarg_obj, VALUE opthash)
 
static int check_exec_env_i (st_data_t st_key, st_data_t st_val, st_data_t arg)
 
static VALUE rb_check_exec_env (VALUE hash)
 
static VALUE rb_check_argv (int argc, VALUE *argv)
 
static VALUE rb_exec_getargs (int *argc_p, VALUE **argv_p, int accept_shell, VALUE *env_ret, VALUE *opthash_ret)
 
static int compare_posix_sh (const void *key, const void *el)
 
static void rb_exec_fillarg (VALUE prog, int argc, VALUE *argv, VALUE env, VALUE opthash, VALUE execarg_obj)
 
VALUE rb_execarg_new (int argc, VALUE *argv, int accept_shell)
 
struct rb_execargrb_execarg_get (VALUE execarg_obj)
 
VALUE rb_execarg_init (int argc, VALUE *argv, int accept_shell, VALUE execarg_obj)
 
VALUE rb_exec_arg_init (int argc, VALUE *argv, int accept_shell, struct rb_exec_arg *e)
 
void rb_execarg_setenv (VALUE execarg_obj, VALUE env)
 
static int fill_envp_buf_i (st_data_t st_key, st_data_t st_val, st_data_t arg)
 
static long run_exec_dup2_tmpbuf_size (long n)
 
void rb_execarg_fixup (VALUE execarg_obj)
 
void rb_exec_arg_fixup (struct rb_exec_arg *e)
 
static int rb_exec_without_timer_thread (const struct rb_execarg *eargp, char *errmsg, size_t errmsg_buflen)
 
VALUE rb_f_exec (int argc, VALUE *argv)
 
static int save_redirect_fd (int fd, struct rb_execarg *sargp, char *errmsg, size_t errmsg_buflen)
 
static int intcmp (const void *a, const void *b)
 
static int intrcmp (const void *a, const void *b)
 
static int run_exec_dup2 (VALUE ary, VALUE tmpbuf, struct rb_execarg *sargp, char *errmsg, size_t errmsg_buflen)
 
static int run_exec_close (VALUE ary, char *errmsg, size_t errmsg_buflen)
 
static int run_exec_open (VALUE ary, struct rb_execarg *sargp, char *errmsg, size_t errmsg_buflen)
 
static int run_exec_dup2_child (VALUE ary, struct rb_execarg *sargp, char *errmsg, size_t errmsg_buflen)
 
static VALUE save_env_i (VALUE i, VALUE ary, int argc, VALUE *argv)
 
static void save_env (struct rb_execarg *sargp)
 
int rb_execarg_run_options (const struct rb_execarg *eargp, struct rb_execarg *sargp, char *errmsg, size_t errmsg_buflen)
 
int rb_run_exec_options_err (const struct rb_exec_arg *e, struct rb_exec_arg *s, char *errmsg, size_t errmsg_buflen)
 
int rb_run_exec_options (const struct rb_exec_arg *e, struct rb_exec_arg *s)
 
int rb_exec_async_signal_safe (const struct rb_execarg *eargp, char *errmsg, size_t errmsg_buflen)
 
int rb_exec_err (const struct rb_exec_arg *e, char *errmsg, size_t errmsg_buflen)
 
int rb_exec (const struct rb_exec_arg *e)
 
static int exit_status_code (VALUE status)
 
static VALUE rb_f_exit_bang (int argc, VALUE *argv, VALUE obj)
 
void rb_exit (int status)
 
VALUE rb_f_exit (int argc, VALUE *argv)
 
VALUE rb_f_abort (int argc, VALUE *argv)
 
void rb_syswait (rb_pid_t pid)
 
static rb_pid_t rb_spawn_process (struct rb_execarg *eargp, char *errmsg, size_t errmsg_buflen)
 
static rb_pid_t rb_spawn_internal (int argc, VALUE *argv, char *errmsg, size_t errmsg_buflen)
 
rb_pid_t rb_spawn_err (int argc, VALUE *argv, char *errmsg, size_t errmsg_buflen)
 
rb_pid_t rb_spawn (int argc, VALUE *argv)
 
static VALUE rb_f_system (int argc, VALUE *argv)
 
static VALUE rb_f_spawn (int argc, VALUE *argv)
 
static VALUE rb_f_sleep (int argc, VALUE *argv)
 
static VALUE proc_getuid (VALUE obj)
 
static VALUE p_uid_change_privilege (VALUE obj, VALUE id)
 
static VALUE proc_getgid (VALUE obj)
 
static VALUE p_gid_change_privilege (VALUE obj, VALUE id)
 
static VALUE proc_geteuid (VALUE obj)
 
static rb_uid_t rb_seteuid_core (rb_uid_t euid)
 
static VALUE p_uid_grant_privilege (VALUE obj, VALUE id)
 
static VALUE proc_getegid (VALUE obj)
 
static rb_gid_t rb_setegid_core (rb_gid_t egid)
 
static VALUE p_gid_grant_privilege (VALUE obj, VALUE id)
 
static VALUE p_uid_exchangeable (void)
 
static VALUE p_uid_exchange (VALUE obj)
 
static VALUE p_gid_exchangeable (void)
 
static VALUE p_gid_exchange (VALUE obj)
 
static VALUE p_uid_have_saved_id (void)
 
static VALUE p_uid_sw_ensure (VALUE obj)
 
static VALUE p_uid_switch (VALUE obj)
 
static VALUE p_gid_have_saved_id (void)
 
static VALUE p_gid_sw_ensure (VALUE obj)
 
static VALUE p_gid_switch (VALUE obj)
 
void Init_process (void)
 

Variables

static VALUE rb_cProcessStatus
 
static st_tablepid_tbl
 
static int forked_child = 0
 
static const rb_data_type_t exec_arg_data_type
 
static int under_uid_switch = 0
 
static int under_gid_switch = 0
 
static rb_uid_t SAVED_USER_ID = -1
 
static rb_gid_t SAVED_GROUP_ID = -1
 
VALUE rb_mProcess
 
VALUE rb_mProcUID
 
VALUE rb_mProcGID
 
VALUE rb_mProcID_Syscall
 

Macro Definition Documentation

#define after_fork ( )    (rb_threadptr_pending_interrupt_clear(GET_THREAD()), after_exec())

Definition at line 1154 of file process.c.

#define ALLOC_ARGV (   n,
  v 
)    ALLOCV_N(char*, (v), ARGV_COUNT(n))

Referenced by rb_proc_exec_n().

#define ARGV_COUNT (   n)    ((n)+1)
#define ARGV_SIZE (   n)    (sizeof(char*) * ARGV_COUNT(n))
#define before_fork ( )    before_exec()

Definition at line 1153 of file process.c.

#define CHILD_ERRMSG_BUFLEN   80

Referenced by rb_f_exec(), and rb_f_spawn().

#define ERRMSG (   str)    do { if (errmsg && 0 < errmsg_buflen) strlcpy(errmsg, (str), errmsg_buflen); } while (0)
#define EXIT_FAILURE   1

Definition at line 44 of file process.c.

Referenced by exit_status_code(), rb_f_abort(), and rb_f_exit_bang().

#define EXIT_SUCCESS   0

Definition at line 41 of file process.c.

Referenced by exit_status_code(), pst_success_p(), rb_f_exit(), and rb_f_system().

#define FINISH_GETGRNAM   /* do nothing */

Definition at line 226 of file process.c.

#define FINISH_GETPWNAM   /* do nothing */

Definition at line 185 of file process.c.

#define MAXPATHLEN   1024

Definition at line 57 of file process.c.

Referenced by proc_exec_sh(), proc_exec_v(), and rb_exec_fillarg().

#define NO_WAITPID

Definition at line 693 of file process.c.

#define numberof (   array)    (int)(sizeof(array)/sizeof((array)[0]))

Definition at line 83 of file process.c.

Referenced by rb_exec_fillarg().

#define OBJ2GID (   id)    NUM2GIDT(id)

Definition at line 227 of file process.c.

Referenced by p_gid_change_privilege(), p_gid_grant_privilege(), and rb_execarg_addopt().

#define OBJ2UID (   id)    NUM2UIDT(id)

Definition at line 186 of file process.c.

Referenced by p_uid_change_privilege(), p_uid_grant_privilege(), and rb_execarg_addopt().

#define p_gid_from_name   p_gid_from_name

Definition at line 230 of file process.c.

Referenced by Init_process().

#define p_gid_from_name   rb_f_notimplement

Definition at line 230 of file process.c.

#define P_NOWAIT   _P_NOWAIT

Definition at line 1408 of file process.c.

Referenced by check_spawn_mode().

#define p_sys_issetugid   rb_f_notimplement

Definition at line 5432 of file process.c.

Referenced by Init_process().

#define p_sys_setegid   rb_f_notimplement

Definition at line 5345 of file process.c.

Referenced by Init_process().

#define p_sys_seteuid   rb_f_notimplement

Definition at line 4961 of file process.c.

Referenced by Init_process().

#define p_sys_setgid   rb_f_notimplement

Definition at line 5301 of file process.c.

Referenced by Init_process().

#define p_sys_setregid   rb_f_notimplement

Definition at line 5374 of file process.c.

Referenced by Init_process().

#define p_sys_setresgid   rb_f_notimplement

Definition at line 5403 of file process.c.

Referenced by Init_process().

#define p_sys_setresuid   rb_f_notimplement

Definition at line 5020 of file process.c.

Referenced by Init_process().

#define p_sys_setreuid   rb_f_notimplement

Definition at line 4990 of file process.c.

Referenced by Init_process().

#define p_sys_setrgid   rb_f_notimplement

Definition at line 5323 of file process.c.

Referenced by Init_process().

#define p_sys_setruid   rb_f_notimplement

Definition at line 4939 of file process.c.

Referenced by Init_process().

#define p_sys_setuid   rb_f_notimplement

Definition at line 4917 of file process.c.

Referenced by Init_process().

#define p_uid_from_name   p_uid_from_name

Definition at line 189 of file process.c.

Referenced by Init_process().

#define p_uid_from_name   rb_f_notimplement

Definition at line 189 of file process.c.

#define PREPARE_GETGRNAM   /* do nothing */

Definition at line 225 of file process.c.

#define PREPARE_GETPWNAM   /* do nothing */

Definition at line 184 of file process.c.

#define preserving_errno (   stmts)    do {int saved_errno = errno; stmts; errno = saved_errno;} while (0)
#define proc_daemon   rb_f_notimplement

Definition at line 5788 of file process.c.

Referenced by Init_process().

#define proc_getgroups   rb_f_notimplement

Definition at line 5580 of file process.c.

Referenced by Init_process().

#define proc_getmaxgroups   rb_f_notimplement

Definition at line 5680 of file process.c.

Referenced by Init_process().

#define proc_getpgid   rb_f_notimplement

Definition at line 4231 of file process.c.

Referenced by Init_process().

#define proc_getpgrp   rb_f_notimplement

Definition at line 4176 of file process.c.

Referenced by Init_process().

#define proc_getpriority   rb_f_notimplement

Definition at line 4387 of file process.c.

Referenced by Init_process().

#define proc_getrlimit   rb_f_notimplement

Definition at line 4655 of file process.c.

Referenced by Init_process().

#define proc_getsid   rb_f_notimplement

Definition at line 4291 of file process.c.

Referenced by Init_process().

#define proc_initgroups   rb_f_notimplement

Definition at line 5660 of file process.c.

Referenced by Init_process().

#define proc_setegid_m   rb_f_notimplement

Definition at line 6179 of file process.c.

Referenced by Init_process().

#define proc_seteuid_m   rb_f_notimplement

Definition at line 6049 of file process.c.

Referenced by Init_process().

#define proc_setgid   rb_f_notimplement

Definition at line 5490 of file process.c.

Referenced by Init_process().

#define proc_setgroups   rb_f_notimplement

Definition at line 5629 of file process.c.

Referenced by Init_process().

#define proc_setmaxgroups   rb_f_notimplement

Definition at line 5712 of file process.c.

Referenced by Init_process().

#define proc_setpgid   rb_f_notimplement

Definition at line 4257 of file process.c.

Referenced by Init_process().

#define proc_setpgrp   rb_f_notimplement

Definition at line 4205 of file process.c.

Referenced by Init_process().

#define proc_setpriority   rb_f_notimplement

Definition at line 4419 of file process.c.

Referenced by Init_process().

#define proc_setrlimit   rb_f_notimplement

Definition at line 4731 of file process.c.

Referenced by Init_process().

#define proc_setsid   rb_f_notimplement

Definition at line 4350 of file process.c.

Referenced by Init_process().

#define proc_setuid   rb_f_notimplement

Definition at line 5079 of file process.c.

Referenced by Init_process().

#define PST2INT (   st)    NUM2INT(pst_to_i(st))
#define rb_f_fork   rb_f_notimplement

Definition at line 3511 of file process.c.

Referenced by Init_process().

#define rb_proc_times   rb_f_notimplement

Definition at line 6638 of file process.c.

Referenced by Init_process().

#define redirect_close (   fd)    close(fd)

Definition at line 2525 of file process.c.

Referenced by run_exec_close(), run_exec_dup2(), and run_exec_open().

#define redirect_dup (   oldfd)    dup(oldfd)

Definition at line 2485 of file process.c.

Referenced by run_exec_dup2(), and save_redirect_fd().

#define redirect_dup2 (   oldfd,
  newfd 
)    dup2((oldfd), (newfd))

Definition at line 2502 of file process.c.

Referenced by run_exec_dup2(), run_exec_dup2_child(), and run_exec_open().

#define redirect_open (   pathname,
  flags,
  perm 
)    open((pathname), (flags), (perm))

Definition at line 2526 of file process.c.

Referenced by run_exec_open().

#define try_with_sh (   prog,
  argv,
  envp 
)    (void)0

Definition at line 1184 of file process.c.

Referenced by proc_exec_cmd(), and proc_exec_v().

#define USE_SPAWNV   0

Definition at line 1405 of file process.c.

#define WEXITSTATUS (   w)    (((w) >> 8) & 0xff)

Definition at line 105 of file process.c.

Referenced by pst_message(), pst_success_p(), and pst_wexitstatus().

#define WIFEXITED (   w)    (((w) & 0xff) == 0)

Definition at line 96 of file process.c.

Referenced by pst_message(), pst_success_p(), pst_wexitstatus(), and pst_wifexited().

#define WIFSIGNALED (   w)    (((w) & 0x7f) > 0 && (((w) & 0x7f) < 0x7f))

Definition at line 99 of file process.c.

Referenced by pst_message(), pst_wifsignaled(), and pst_wtermsig().

#define WIFSTOPPED (   w)    (((w) & 0xff) == 0x7f)

Definition at line 102 of file process.c.

Referenced by pst_message(), pst_wifstopped(), and pst_wstopsig().

#define WSTOPSIG   WEXITSTATUS

Definition at line 111 of file process.c.

Referenced by pst_message(), and pst_wstopsig().

#define WTERMSIG (   w)    ((w) & 0x7f)

Definition at line 108 of file process.c.

Referenced by pst_message(), and pst_wtermsig().

Function Documentation

static void after_exec ( void  )
static

Definition at line 1147 of file process.c.

References after_exec_async_signal_safe(), and after_exec_non_async_signal_safe().

Referenced by proc_exec_v(), and rb_proc_exec().

static void after_exec_async_signal_safe ( void  )
static

Definition at line 1130 of file process.c.

References signal().

Referenced by after_exec(), and rb_exec_async_signal_safe().

static void after_exec_non_async_signal_safe ( void  )
static
static void before_exec ( void  )
static

Definition at line 1122 of file process.c.

References before_exec_async_signal_safe(), and before_exec_non_async_signal_safe().

Referenced by proc_exec_v(), and rb_proc_exec().

static void before_exec_async_signal_safe ( void  )
static

Definition at line 1093 of file process.c.

References signal().

Referenced by before_exec(), and rb_exec_async_signal_safe().

static void before_exec_non_async_signal_safe ( void  )
static

Definition at line 1107 of file process.c.

References forked_child, and rb_thread_stop_timer_thread().

Referenced by before_exec(), and rb_exec_without_timer_thread().

static int check_exec_env_i ( st_data_t  st_key,
st_data_t  st_val,
st_data_t  arg 
)
static
static VALUE check_exec_fds ( struct rb_execarg eargp)
static
static int check_exec_fds_1 ( struct rb_execarg eargp,
VALUE  h,
int  maxhint,
VALUE  ary 
)
static
static int check_exec_options_i ( st_data_t  st_key,
st_data_t  st_val,
st_data_t  arg 
)
static

Definition at line 1818 of file process.c.

References key, PRIsVALUE, rb_eArgError, rb_execarg_addopt(), rb_raise(), ST_CONTINUE, SYMBOL_P, and val.

Referenced by rb_check_exec_options().

static int check_exec_options_i_extract ( st_data_t  st_key,
st_data_t  st_val,
st_data_t  arg 
)
static

Definition at line 1833 of file process.c.

References args, key, NIL_P(), rb_execarg_addopt(), rb_hash_aset(), rb_hash_new(), ST_CONTINUE, and val.

Referenced by rb_execarg_extract_options().

static void check_exec_redirect ( VALUE  key,
VALUE  val,
struct rb_execarg eargp 
)
static
static VALUE check_exec_redirect1 ( VALUE  ary,
VALUE  key,
VALUE  param 
)
static
static VALUE check_exec_redirect_fd ( VALUE  v,
int  iskey 
)
static
static void check_gid_switch ( void  )
static
static void check_uid_switch ( void  )
static
static int compare_posix_sh ( const void key,
const void el 
)
static

Definition at line 2046 of file process.c.

References key, string_part::len, string_part::ptr, and ret.

Referenced by rb_exec_fillarg().

static VALUE detach_process_pid ( VALUE  thread)
static

Definition at line 997 of file process.c.

References id_pid(), and rb_thread_local_aref().

Referenced by rb_detach_process().

static VALUE detach_process_watcher ( void arg)
static

Definition at line 1003 of file process.c.

References arg, wait_data::pid, rb_last_status_get(), rb_waitpid(), and status.

Referenced by rb_detach_process().

static int exit_status_code ( VALUE  status)
static

Definition at line 3515 of file process.c.

References EXIT_FAILURE, EXIT_SUCCESS, NUM2INT, Qfalse, and Qtrue.

Referenced by rb_f_exit(), and rb_f_exit_bang().

static int fill_envp_buf_i ( st_data_t  st_key,
st_data_t  st_val,
st_data_t  arg 
)
static
static void free_exec_arg ( void ptr)
static

Definition at line 1382 of file process.c.

References xfree.

static VALUE get_pid ( void  )
static

Definition at line 245 of file process.c.

References PIDT2NUM, and rb_secure().

Referenced by Init_process().

static VALUE get_ppid ( void  )
static

Definition at line 269 of file process.c.

References PIDT2NUM, and rb_secure().

Referenced by Init_process().

static VALUE hide_obj ( VALUE  obj)
static
static ID id_pid ( void  )
inlinestatic

Definition at line 989 of file process.c.

References CONST_ID, and wait_data::pid.

Referenced by detach_process_pid(), and rb_detach_process().

void Init_process ( void  )

Definition at line 6653 of file process.c.

References CLASS_OF, get_pid(), get_ppid(), getegid(), geteuid(), inf, INT2FIX, NULL, p_gid_change_privilege(), p_gid_exchange(), p_gid_exchangeable(), p_gid_from_name, p_gid_grant_privilege(), p_gid_have_saved_id(), p_gid_switch(), p_sys_issetugid, p_sys_setegid, p_sys_seteuid, p_sys_setgid, p_sys_setregid, p_sys_setresgid, p_sys_setresuid, p_sys_setreuid, p_sys_setrgid, p_sys_setruid, p_sys_setuid, p_uid_change_privilege(), p_uid_exchange(), p_uid_exchangeable(), p_uid_from_name, p_uid_grant_privilege(), p_uid_have_saved_id(), p_uid_switch(), proc_daemon, proc_detach(), proc_getegid(), proc_geteuid(), proc_getgid(), proc_getgroups, proc_getmaxgroups, proc_getpgid, proc_getpgrp, proc_getpriority, proc_getrlimit, proc_getsid, proc_getuid(), proc_initgroups, proc_setegid_m, proc_seteuid_m, proc_setgid, proc_setgroups, proc_setmaxgroups, proc_setpgid, proc_setpgrp, proc_setpriority, proc_setrlimit, proc_setsid, proc_setuid, proc_wait(), proc_wait2(), proc_waitall(), pst_bitand(), pst_equal(), pst_inspect(), pst_pid(), pst_rshift(), pst_success_p(), pst_to_i(), pst_to_s(), pst_wcoredump(), pst_wexitstatus(), pst_wifexited(), pst_wifsignaled(), pst_wifstopped(), pst_wstopsig(), pst_wtermsig(), rb_cObject, rb_cProcessStatus, rb_define_alias(), rb_define_class_under(), rb_define_const(), rb_define_global_function(), rb_define_method(), rb_define_module(), rb_define_module_function(), rb_define_module_under(), rb_define_singleton_method(), rb_define_virtual_variable(), rb_f_abort(), rb_f_exec(), rb_f_exit(), rb_f_exit_bang(), rb_f_fork, rb_f_kill(), rb_f_sleep(), rb_f_spawn(), rb_f_system(), rb_last_status_get(), rb_proc_times, rb_singleton_class(), rb_struct_define(), rb_undef_method(), and WNOHANG.

static int intcmp ( const void a,
const void b 
)
static

Definition at line 2562 of file process.c.

References b.

Referenced by run_exec_dup2().

static int intrcmp ( const void a,
const void b 
)
static

Definition at line 2568 of file process.c.

References a.

Referenced by run_exec_dup2().

static void mark_exec_arg ( void ptr)
static
static size_t memsize_exec_arg ( const void ptr)
static

Definition at line 1388 of file process.c.

static VALUE p_gid_change_privilege ( VALUE  obj,
VALUE  id 
)
static
static VALUE p_gid_exchange ( VALUE  obj)
static
static VALUE p_gid_exchangeable ( void  )
static

Definition at line 6316 of file process.c.

References Qfalse, and Qtrue.

Referenced by Init_process().

static VALUE p_gid_grant_privilege ( VALUE  obj,
VALUE  id 
)
static

Definition at line 6237 of file process.c.

References id, OBJ2GID, and rb_setegid_core().

Referenced by Init_process().

static VALUE p_gid_have_saved_id ( void  )
static

Definition at line 6495 of file process.c.

References Qfalse, and Qtrue.

Referenced by Init_process().

static VALUE p_gid_sw_ensure ( VALUE  obj)
static

Definition at line 6566 of file process.c.

References p_gid_exchange().

Referenced by p_gid_switch().

static VALUE p_gid_switch ( VALUE  obj)
static
static VALUE p_uid_change_privilege ( VALUE  obj,
VALUE  id 
)
static
static VALUE p_uid_exchange ( VALUE  obj)
static
static VALUE p_uid_exchangeable ( void  )
static

Definition at line 6254 of file process.c.

References Qfalse, and Qtrue.

Referenced by Init_process().

static VALUE p_uid_grant_privilege ( VALUE  obj,
VALUE  id 
)
static

Definition at line 6107 of file process.c.

References id, OBJ2UID, and rb_seteuid_core().

Referenced by Init_process().

static VALUE p_uid_have_saved_id ( void  )
static

Definition at line 6379 of file process.c.

References Qfalse, and Qtrue.

Referenced by Init_process().

static VALUE p_uid_sw_ensure ( VALUE  obj)
static

Definition at line 6451 of file process.c.

References p_uid_exchange().

Referenced by p_uid_switch().

static VALUE p_uid_switch ( VALUE  obj)
static
static VALUE proc_detach ( VALUE  obj,
VALUE  pid 
)
static

Definition at line 1072 of file process.c.

References NUM2PIDT, rb_detach_process(), and rb_secure().

Referenced by Init_process().

static int proc_exec_cmd ( const char *  prog,
VALUE  argv_str,
VALUE  envp_str 
)
static
static int proc_exec_sh ( const char *  str,
VALUE  envp_str 
)
static
static int proc_exec_v ( char **  argv,
const char *  prog 
)
static
static VALUE proc_getegid ( VALUE  obj)
static

Definition at line 6127 of file process.c.

References getegid(), and GIDT2NUM.

Referenced by Init_process().

static VALUE proc_geteuid ( VALUE  obj)
static

Definition at line 6003 of file process.c.

References geteuid(), and UIDT2NUM.

Referenced by Init_process().

static VALUE proc_getgid ( VALUE  obj)
static

Definition at line 5448 of file process.c.

References getgid(), and GIDT2NUM.

Referenced by Init_process().

static VALUE proc_getuid ( VALUE  obj)
static

Definition at line 5036 of file process.c.

References getuid(), and UIDT2NUM.

Referenced by Init_process().

static VALUE proc_wait ( int  argc,
VALUE argv 
)
static
static VALUE proc_wait2 ( int  argc,
VALUE argv 
)
static

Definition at line 918 of file process.c.

References NIL_P(), wait_data::pid, proc_wait(), Qnil, rb_assoc_new(), and rb_last_status_get().

Referenced by Init_process().

static VALUE proc_waitall ( void  )
static
static VALUE pst_bitand ( VALUE  st1,
VALUE  st2 
)
static

Definition at line 490 of file process.c.

References INT2NUM, NUM2INT, PST2INT, and status.

Referenced by Init_process().

static VALUE pst_equal ( VALUE  st1,
VALUE  st2 
)
static

Definition at line 470 of file process.c.

References pst_to_i(), Qtrue, and rb_equal().

Referenced by Init_process().

static VALUE pst_inspect ( VALUE  st)
static
static void pst_message ( VALUE  str,
rb_pid_t  pid,
int  status 
)
static
static VALUE pst_pid ( VALUE  st)
static

Definition at line 362 of file process.c.

References rb_attr_get(), and rb_intern.

Referenced by Init_process(), pst_inspect(), and pst_to_s().

static VALUE pst_rshift ( VALUE  st1,
VALUE  st2 
)
static

Definition at line 511 of file process.c.

References INT2NUM, NUM2INT, PST2INT, and status.

Referenced by Init_process().

static VALUE pst_success_p ( VALUE  st)
static

Definition at line 659 of file process.c.

References EXIT_SUCCESS, PST2INT, Qfalse, Qnil, Qtrue, status, WEXITSTATUS, and WIFEXITED.

Referenced by Init_process().

static VALUE pst_to_i ( VALUE  st)
static

Definition at line 343 of file process.c.

References rb_iv_get().

Referenced by Init_process(), and pst_equal().

static VALUE pst_to_s ( VALUE  st)
static

Definition at line 414 of file process.c.

References NUM2PIDT, PST2INT, pst_message(), pst_pid(), rb_str_buf_new(), status, and str.

Referenced by Init_process().

static VALUE pst_wcoredump ( VALUE  st)
static

Definition at line 678 of file process.c.

References PST2INT, Qfalse, Qtrue, and status.

Referenced by Init_process().

static VALUE pst_wexitstatus ( VALUE  st)
static

Definition at line 640 of file process.c.

References INT2NUM, PST2INT, Qnil, status, WEXITSTATUS, and WIFEXITED.

Referenced by Init_process().

static VALUE pst_wifexited ( VALUE  st)
static

Definition at line 609 of file process.c.

References PST2INT, Qfalse, Qtrue, status, and WIFEXITED.

Referenced by Init_process().

static VALUE pst_wifsignaled ( VALUE  st)
static

Definition at line 568 of file process.c.

References PST2INT, Qfalse, Qtrue, status, and WIFSIGNALED.

Referenced by Init_process().

static VALUE pst_wifstopped ( VALUE  st)
static

Definition at line 529 of file process.c.

References PST2INT, Qfalse, Qtrue, status, and WIFSTOPPED.

Referenced by Init_process().

static VALUE pst_wstopsig ( VALUE  st)
static

Definition at line 549 of file process.c.

References INT2NUM, PST2INT, Qnil, status, WIFSTOPPED, and WSTOPSIG.

Referenced by Init_process().

static VALUE pst_wtermsig ( VALUE  st)
static

Definition at line 589 of file process.c.

References INT2NUM, PST2INT, Qnil, status, WIFSIGNALED, and WTERMSIG.

Referenced by Init_process().

static VALUE rb_check_argv ( int  argc,
VALUE argv 
)
static
static VALUE rb_check_exec_env ( VALUE  hash)
static

Definition at line 1966 of file process.c.

References check_exec_env_i(), env, hide_obj(), rb_ary_new(), RHASH_TBL, and st_foreach().

Referenced by rb_exec_fillarg(), and rb_execarg_setenv().

static void rb_check_exec_options ( VALUE  opthash,
VALUE  execarg_obj 
)
static

Definition at line 1926 of file process.c.

References check_exec_options_i(), RHASH_EMPTY_P, RHASH_TBL, and st_foreach().

Referenced by rb_exec_fillarg().

VALUE rb_detach_process ( rb_pid_t  pid)
int rb_exec ( const struct rb_exec_arg e)
int rb_exec_arg_addopt ( struct rb_exec_arg e,
VALUE  key,
VALUE  val 
)

Definition at line 1812 of file process.c.

References rb_exec_arg::execarg_obj, and rb_execarg_addopt().

void rb_exec_arg_fixup ( struct rb_exec_arg e)

Definition at line 2365 of file process.c.

References rb_exec_arg::execarg_obj, and rb_execarg_fixup().

VALUE rb_exec_arg_init ( int  argc,
VALUE argv,
int  accept_shell,
struct rb_exec_arg e 
)

Definition at line 2259 of file process.c.

References rb_exec_arg::execarg_obj, and rb_execarg_init().

int rb_exec_async_signal_safe ( const struct rb_execarg eargp,
char *  errmsg,
size_t  errmsg_buflen 
)
int rb_exec_err ( const struct rb_exec_arg e,
char *  errmsg,
size_t  errmsg_buflen 
)
static void rb_exec_fillarg ( VALUE  prog,
int  argc,
VALUE argv,
VALUE  env,
VALUE  opthash,
VALUE  execarg_obj 
)
static
static VALUE rb_exec_getargs ( int argc_p,
VALUE **  argv_p,
int  accept_shell,
VALUE env_ret,
VALUE opthash_ret 
)
static

Definition at line 2008 of file process.c.

References hash, NIL_P(), rb_check_argv(), and rb_check_hash_type().

Referenced by rb_execarg_init().

static int rb_exec_without_timer_thread ( const struct rb_execarg eargp,
char *  errmsg,
size_t  errmsg_buflen 
)
static
int rb_execarg_addopt ( VALUE  execarg_obj,
VALUE  key,
VALUE  val 
)
VALUE rb_execarg_extract_options ( VALUE  execarg_obj,
VALUE  opthash 
)

Definition at line 1934 of file process.c.

References args, check_exec_options_i_extract(), Qnil, RHASH_EMPTY_P, RHASH_TBL, and st_foreach().

Referenced by rb_io_s_popen().

void rb_execarg_fixup ( VALUE  execarg_obj)
struct rb_execarg* rb_execarg_get ( VALUE  execarg_obj)
VALUE rb_execarg_init ( int  argc,
VALUE argv,
int  accept_shell,
VALUE  execarg_obj 
)
VALUE rb_execarg_new ( int  argc,
VALUE argv,
int  accept_shell 
)
int rb_execarg_run_options ( const struct rb_execarg eargp,
struct rb_execarg sargp,
char *  errmsg,
size_t  errmsg_buflen 
)
void rb_execarg_setenv ( VALUE  execarg_obj,
VALUE  env 
)

Definition at line 2265 of file process.c.

References env, rb_execarg::env_modification, NIL_P(), Qfalse, rb_check_exec_env(), and rb_execarg_get().

Referenced by rb_io_s_popen().

void rb_exit ( int  status)
VALUE rb_f_abort ( int  argc,
VALUE argv 
)
VALUE rb_f_exec ( int  argc,
VALUE argv 
)
VALUE rb_f_exit ( int  argc,
VALUE argv 
)

Definition at line 3623 of file process.c.

References exit_status_code(), EXIT_SUCCESS, rb_exit(), rb_scan_args(), rb_secure(), status, and UNREACHABLE.

Referenced by Init_process().

static VALUE rb_f_exit_bang ( int  argc,
VALUE argv,
VALUE  obj 
)
static

Definition at line 3549 of file process.c.

References EXIT_FAILURE, exit_status_code(), rb_scan_args(), rb_secure(), status, and UNREACHABLE.

Referenced by Init_process().

static VALUE rb_f_sleep ( int  argc,
VALUE argv 
)
static
static VALUE rb_f_spawn ( int  argc,
VALUE argv 
)
static
static VALUE rb_f_system ( int  argc,
VALUE argv 
)
static
void rb_last_status_clear ( void  )
VALUE rb_last_status_get ( void  )
void rb_last_status_set ( int  status,
rb_pid_t  pid 
)
int rb_proc_exec ( const char *  str)

Definition at line 1347 of file process.c.

References after_exec(), before_exec(), preserving_errno, proc_exec_sh(), Qfalse, and ret.

int rb_proc_exec_n ( int  argc,
VALUE argv,
const char *  prog 
)

Definition at line 1273 of file process.c.

References ALLOC_ARGV, ALLOCV_END, argc, args, i, proc_exec_v(), ret, RSTRING_PTR, and v.

int rb_run_exec_options ( const struct rb_exec_arg e,
struct rb_exec_arg s 
)

Definition at line 3049 of file process.c.

References rb_exec_arg::execarg_obj, NULL, rb_execarg_get(), and rb_execarg_run_options().

int rb_run_exec_options_err ( const struct rb_exec_arg e,
struct rb_exec_arg s,
char *  errmsg,
size_t  errmsg_buflen 
)

Definition at line 3043 of file process.c.

References rb_exec_arg::execarg_obj, rb_execarg_get(), and rb_execarg_run_options().

static rb_gid_t rb_setegid_core ( rb_gid_t  egid)
static
static rb_uid_t rb_seteuid_core ( rb_uid_t  euid)
static
rb_pid_t rb_spawn ( int  argc,
VALUE argv 
)

Definition at line 3757 of file process.c.

References NULL, and rb_spawn_internal().

rb_pid_t rb_spawn_err ( int  argc,
VALUE argv,
char *  errmsg,
size_t  errmsg_buflen 
)

Definition at line 3751 of file process.c.

References rb_spawn_internal().

static rb_pid_t rb_spawn_internal ( int  argc,
VALUE argv,
char *  errmsg,
size_t  errmsg_buflen 
)
static
static rb_pid_t rb_spawn_process ( struct rb_execarg eargp,
char *  errmsg,
size_t  errmsg_buflen 
)
static
void rb_syswait ( rb_pid_t  pid)

Definition at line 3676 of file process.c.

References rb_waitpid(), and status.

Referenced by rb_io_close().

rb_pid_t rb_waitpid ( rb_pid_t  pid,
int st,
int  flags 
)
static void* rb_waitpid_blocking ( void data)
static

Definition at line 727 of file process.c.

References arg, data, NULL, result, wait, and waitpid().

Referenced by rb_waitpid().

static int run_exec_close ( VALUE  ary,
char *  errmsg,
size_t  errmsg_buflen 
)
static

Definition at line 2720 of file process.c.

References ERRMSG, FIX2INT, i, RARRAY_LEN, RARRAY_PTR(), redirect_close, and ret.

Referenced by rb_execarg_run_options().

static int run_exec_dup2 ( VALUE  ary,
VALUE  tmpbuf,
struct rb_execarg sargp,
char *  errmsg,
size_t  errmsg_buflen 
)
static
static int run_exec_dup2_child ( VALUE  ary,
struct rb_execarg sargp,
char *  errmsg,
size_t  errmsg_buflen 
)
static
static long run_exec_dup2_tmpbuf_size ( long  n)
static

Definition at line 2581 of file process.c.

References n.

Referenced by rb_execarg_fixup(), and rb_execarg_run_options().

static int run_exec_open ( VALUE  ary,
struct rb_execarg sargp,
char *  errmsg,
size_t  errmsg_buflen 
)
static
static void save_env ( struct rb_execarg sargp)
static
static VALUE save_env_i ( VALUE  i,
VALUE  ary,
int  argc,
VALUE argv 
)
static

Definition at line 2882 of file process.c.

References hide_obj(), Qnil, rb_ary_dup(), and rb_ary_push().

Referenced by save_env().

static int save_redirect_fd ( int  fd,
struct rb_execarg sargp,
char *  errmsg,
size_t  errmsg_buflen 
)
static
static void security ( const char *  str)
static

Definition at line 1159 of file process.c.

References rb_env_path_tainted(), rb_eSecurityError, rb_raise(), and rb_safe_level.

Referenced by rb_check_argv().

static int wait_each ( rb_pid_t  pid,
int  status,
struct wait_data data 
)
static

Definition at line 702 of file process.c.

References wait_data::pid, ST_DELETE, ST_STOP, wait_data::status, and status.

Referenced by rb_waitpid().

static int waitall_each ( rb_pid_t  pid,
int  status,
VALUE  ary 
)
static

Definition at line 712 of file process.c.

References PIDT2NUM, rb_ary_push(), rb_assoc_new(), rb_last_status_get(), rb_last_status_set(), and ST_DELETE.

Referenced by proc_waitall().

Variable Documentation

const rb_data_type_t exec_arg_data_type
static
Initial value:
= {
"exec_arg",
}
static void mark_exec_arg(void *ptr)
Definition: process.c:1357
static size_t memsize_exec_arg(const void *ptr)
Definition: process.c:1388
static void free_exec_arg(void *ptr)
Definition: process.c:1382

Definition at line 1393 of file process.c.

Referenced by rb_execarg_get(), and rb_execarg_new().

int forked_child = 0
static
st_table* pid_tbl
static

Definition at line 694 of file process.c.

VALUE rb_cProcessStatus
static

Definition at line 306 of file process.c.

Referenced by Init_process(), and rb_last_status_set().

VALUE rb_mProcess

Definition at line 6641 of file process.c.

VALUE rb_mProcGID

Definition at line 6643 of file process.c.

VALUE rb_mProcID_Syscall

Definition at line 6644 of file process.c.

VALUE rb_mProcUID

Definition at line 6642 of file process.c.

rb_gid_t SAVED_GROUP_ID = -1
static

Definition at line 5801 of file process.c.

rb_uid_t SAVED_USER_ID = -1
static

Definition at line 5093 of file process.c.

int under_gid_switch = 0
static

Definition at line 4744 of file process.c.

int under_uid_switch = 0
static

Definition at line 4734 of file process.c.