diff options
-rw-r--r-- | process.c | 189 |
1 files changed, 111 insertions, 78 deletions
@@ -419,6 +419,12 @@ parent_redirect_close(int fd) * Module to handle processes. */ /* * call-seq: * Process.pid -> integer @@ -430,18 +436,17 @@ parent_redirect_close(int fd) */ static VALUE -get_pid(void) { - return PIDT2NUM(getpid()); } static VALUE -proc_get_pid(VALUE _) { - return get_pid(); } - /* * call-seq: * Process.ppid -> integer @@ -459,12 +464,6 @@ proc_get_pid(VALUE _) */ static VALUE -get_ppid(void) -{ - return PIDT2NUM(getppid()); -} - -static VALUE proc_get_ppid(VALUE _) { return get_ppid(); @@ -1230,6 +1229,31 @@ rb_waitpid(rb_pid_t pid, int *st, int flags) return w.ret; } /* [MG]:FIXME: I wasn't sure how this should be done, since ::wait() has historically been documented as if it didn't take any arguments @@ -1290,32 +1314,6 @@ rb_waitpid(rb_pid_t pid, int *st, int flags) */ static VALUE -proc_wait(int argc, VALUE *argv) -{ - rb_pid_t pid; - int flags, status; - - flags = 0; - if (rb_check_arity(argc, 0, 2) == 0) { - pid = -1; - } - else { - VALUE vflags; - pid = NUM2PIDT(argv[0]); - if (argc == 2 && !NIL_P(vflags = argv[1])) { - flags = NUM2UINT(vflags); - } - } - if ((pid = rb_waitpid(pid, &status, flags)) < 0) - rb_sys_fail(0); - if (pid == 0) { - rb_last_status_clear(); - return Qnil; - } - return PIDT2NUM(pid); -} - -static VALUE proc_m_wait(int c, VALUE *v, VALUE _) { return proc_wait(c, v); @@ -2883,6 +2881,31 @@ rb_execarg_fail(VALUE execarg_obj, int err, const char *errmsg) } #endif /* * call-seq: * exec([env,] command... [,options]) @@ -2956,31 +2979,6 @@ rb_execarg_fail(VALUE execarg_obj, int err, const char *errmsg) * # never get here */ -VALUE -rb_f_exec(int argc, const VALUE *argv) -{ - VALUE execarg_obj, fail_str; - struct rb_execarg *eargp; -#define CHILD_ERRMSG_BUFLEN 80 - char errmsg[CHILD_ERRMSG_BUFLEN] = { '\0' }; - int err; - - execarg_obj = rb_execarg_new(argc, argv, TRUE, FALSE); - eargp = rb_execarg_get(execarg_obj); - if (mjit_enabled) mjit_finish(false); // avoid ing resources, and do not leave files. XXX: JIT-ed handle can after exec error is rescued. - before_exec(); /* stop timer thread before redirects */ - rb_execarg_parent_start(execarg_obj); - fail_str = eargp->use_shell ? eargp->invoke.sh.shell_script : eargp->invoke.cmd.command_name; - - err = exec_async_signal_safe(eargp, errmsg, sizeof(errmsg)); - after_exec(); /* restart timer thread */ - - rb_exec_fail(eargp, err, errmsg); - RB_GC_GUARD(execarg_obj); - rb_syserr_fail_str(err, fail_str); - UNREACHABLE_RETURN(Qnil); -} - static VALUE f_exec(int c, const VALUE *a, VALUE _) { @@ -4204,6 +4202,21 @@ rb_exit(int status) ruby_stop(status); } /* * call-seq: @@ -4246,22 +4259,6 @@ rb_exit(int status) * in finalizer */ -VALUE -rb_f_exit(int argc, const VALUE *argv) -{ - int istatus; - - if (rb_check_arity(argc, 0, 1) == 1) { - istatus = exit_status_code(argv[0]); - } - else { - istatus = EXIT_SUCCESS; - } - rb_exit(istatus); - - UNREACHABLE_RETURN(Qnil); -} - static VALUE f_exit(int c, const VALUE *a, VALUE _) { @@ -8085,6 +8082,42 @@ get_PROCESS_ID(ID _x, VALUE *_y) return get_pid(); } static VALUE proc_rb_f_kill(int c, const VALUE *v, VALUE _) { |