summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
-rw-r--r--process.c189
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 _)
{