Spec-Zone.ru › Ruby 4.0
  1. Process::
  2. Status

class Process::Status

Родительский класс:
Object

Объект Process::Status содержит информацию о системном процессе.

Потоковая переменная $? изначально имеет значение nil. Некоторые методы присваивают ей объект Process::Status, представляющий системный процесс (выполняющийся или завершённый):

`ruby -e "exit 99"`
stat = $?       # => #<Process::Status: pid 1262862 exit 99>
stat.class      # => Process::Status
stat.to_i       # => 25344
stat.stopped?   # => false
stat.exited?    # => true
stat.exitstatus # => 99

Открытые методы класса

Process::Status.wait(pid = -1, flags = 0) → Process::Status Показать исходный код
static VALUE
rb_process_status_waitv(int argc, VALUE *argv, VALUE _)
{
    rb_check_arity(argc, 0, 2);

    rb_pid_t pid = -1;
    int flags = 0;

    if (argc >= 1) {
        pid = NUM2PIDT(argv[0]);
    }

    if (argc >= 2) {
        flags = RB_NUM2INT(argv[1]);
    }

    return rb_process_status_wait(pid, flags);
}

Подобно Process.wait, но возвращает объект Process::Status (вместо целочисленного pid или nil); значения pid и flags см. в описании Process.wait.

Если имеются дочерние процессы, ожидает завершения одного из них и возвращает объект Process::Status, содержащий информацию об этом процессе; устанавливает потоковую переменную $?:

Process.spawn('cat /nop') # => 1155880
Process::Status.wait      # => #<Process::Status: pid 1155880 exit 1>
$?                        # => #<Process::Status: pid 1155508 exit 1>

Если дочерних процессов нет, возвращает «пустой» объект Process::Status, который не представляет реальный процесс; потоковая переменная $? не устанавливается:

Process::Status.wait # => #<Process::Status: pid -1 exit 0>
$?                   # => #<Process::Status: pid 1155508 exit 1> # Unchanged.

Может вызывать перехватчик планировщика Fiber::Scheduler#process_wait.

Доступно не на всех платформах.

Открытые методы экземпляра

stat == other → true or false Показать исходный код
static VALUE
pst_equal(VALUE st1, VALUE st2)
{
    if (st1 == st2) return Qtrue;
    return rb_equal(pst_to_i(st1), st2);
}

Возвращает значение, указывающее, равно ли значение to_i значению other:

`cat /nop`
stat = $?                # => #<Process::Status: pid 1170366 exit 1>
sprintf('%x', stat.to_i) # => "100"
stat == 0x100            # => true
coredump? → true or false Показать исходный код
static VALUE
pst_wcoredump(VALUE st)
{
#ifdef WCOREDUMP
    int status = PST2INT(st);

    return RBOOL(WCOREDUMP(status));
#else
    return Qfalse;
#endif
}

Возвращает true, если при завершении процесс создал дамп памяти, и false в противном случае.

Доступно не на всех платформах.

exited? → true or false Показать исходный код
static VALUE
pst_wifexited(VALUE st)
{
    int status = PST2INT(st);

    return RBOOL(WIFEXITED(status));
}

Возвращает true, если процесс завершился нормально (например, при вызове exit() или завершении программы), и false в противном случае.

exitstatus → integer or nil Показать исходный код
static VALUE
pst_wexitstatus(VALUE st)
{
    int status = PST2INT(st);

    if (WIFEXITED(status))
        return INT2NUM(WEXITSTATUS(status));
    return Qnil;
}

Если процесс завершился, возвращает младшие восемь бит кода возврата процесса; в противном случае возвращает nil:

`exit 99`
$?.exitstatus # => 99
inspect → string Показать исходный код
static VALUE
pst_inspect(VALUE st)
{
    rb_pid_t pid;
    int status;
    VALUE str;

    pid = pst_pid(st);
    if (!pid) {
        return rb_sprintf("#<%s: uninitialized>", rb_class2name(CLASS_OF(st)));
    }
    status = PST2INT(st);

    str = rb_sprintf("#<%s: ", rb_class2name(CLASS_OF(st)));
    pst_message(str, pid, status);
    rb_str_cat2(str, ">");
    return str;
}

Возвращает строковое представление self:

system("false")
$?.inspect # => "#<Process::Status: pid 1303494 exit 1>"
pid → integer Показать исходный код
static VALUE
pst_pid_m(VALUE self)
{
    rb_pid_t pid = pst_pid(self);
    return PIDT2NUM(pid);
}

Возвращает идентификатор процесса:

system("false")
$?.pid # => 1247002
signaled? → true or false Показать исходный код
static VALUE
pst_wifsignaled(VALUE st)
{
    int status = PST2INT(st);

    return RBOOL(WIFSIGNALED(status));
}

Возвращает true, если процесс завершился из-за необработанного сигнала, и false в противном случае.

stopped? → true or false Показать исходный код
static VALUE
pst_wifstopped(VALUE st)
{
    int status = PST2INT(st);

    return RBOOL(WIFSTOPPED(status));
}

Возвращает true, если этот процесс остановлен и соответствующий вызов ожидания был выполнен с флагом Process::WUNTRACED, и false в противном случае.

stopsig → integer or nil Показать исходный код
static VALUE
pst_wstopsig(VALUE st)
{
    int status = PST2INT(st);

    if (WIFSTOPPED(status))
        return INT2NUM(WSTOPSIG(status));
    return Qnil;
}

Возвращает номер сигнала, вызвавшего остановку процесса, или nil, если процесс не остановлен.

success? → true, false, or nil Показать исходный код
static VALUE
pst_success_p(VALUE st)
{
    int status = PST2INT(st);

    if (!WIFEXITED(status))
        return Qnil;
    return RBOOL(WEXITSTATUS(status) == EXIT_SUCCESS);
}

Возвращает:

  • true, если процесс успешно завершился.

  • false, если процесс завершился с ошибкой.

  • nil, если процесс ещё не завершился.

termsig → integer or nil Показать исходный код
static VALUE
pst_wtermsig(VALUE st)
{
    int status = PST2INT(st);

    if (WIFSIGNALED(status))
        return INT2NUM(WTERMSIG(status));
    return Qnil;
}

Возвращает номер сигнала, вызвавшего завершение процесса, или nil, если процесс завершился не из-за необработанного сигнала.

to_i → integer Показать исходный код
static VALUE
pst_to_i(VALUE self)
{
    int status = pst_status(self);
    return RB_INT2NUM(status);
}

Возвращает зависящее от системы целочисленное состояние self:

`cat /nop`
$?.to_i # => 256
to_s → string Показать исходный код
static VALUE
pst_to_s(VALUE st)
{
    rb_pid_t pid;
    int status;
    VALUE str;

    pid = pst_pid(st);
    status = PST2INT(st);

    str = rb_str_buf_new(0);
    pst_message(str, pid, status);
    return str;
}

Возвращает строковое представление self:

`cat /nop`
$?.to_s # => "pid 1262141 exit 1"

Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API