Spec-Zone.ru › Ruby 2.2

класс Process::Status

Родитель:
Объект

Process::Status содержит информацию о статусе запущенного или завершенного системного процесса. Встроенная переменная $? имеет значение nil или объекта Process::Status.

fork { exit 99 }   #=> 26557
Process.wait       #=> 26557
$?.class           #=> Process::Status
$?.to_i            #=> 25344
$? >> 8            #=> 99
$?.stopped?        #=> false
$?.exited?         #=> true
$?.exitstatus      #=> 99

Системы Posix записывают информацию о процессах с использованием 16-битного целого числа. Нижние биты записывают статус процесса (остановлен, завершен, сигнализирован), а верхние биты могут содержать дополнительную информацию (например, код возврата программы в случае завершенных процессов). Перед Ruby 1.8 эти биты напрямую передавались в программу Ruby. Теперь Ruby упаковывает их в объект Process::Status. Однако для максимальной совместимости эти объекты сохраняют побитовый интерфейс. В последующих описаниях, когда мы говорим о целочисленном значении stat, мы имеем в виду это 16-битное значение.

Публичные методы экземпляра

stat & num → fixnum Показать исходный код
static VALUE
pst_bitand(VALUE st1, VALUE st2)
{
    int status = PST2INT(st1) & NUM2INT(st2);

    return INT2NUM(status);
}

Логическое И битов в stat с num.

fork { exit 0x37 }
Process.wait
sprintf('%04x', $?.to_i)       #=> "3700"
sprintf('%04x', $? & 0x1e00)   #=> "1600"
stat == other → true или false Показать исходный код
static VALUE
pst_equal(VALUE st1, VALUE st2)
{
    if (st1 == st2) return Qtrue;
    return rb_equal(pst_to_i(st1), st2);
}

Возвращает true, если целочисленное значение stat равно other.

stat >> num → fixnum Показать исходный код
static VALUE
pst_rshift(VALUE st1, VALUE st2)
{
    int status = PST2INT(st1) >> NUM2INT(st2);

    return INT2NUM(status);
}

Сдвигает биты в stat вправо на num позиций.

fork { exit 99 }   #=> 26563
Process.wait       #=> 26563
$?.to_i            #=> 25344
$? >> 8            #=> 99
coredump? → true или false Показать исходный код
static VALUE
pst_wcoredump(VALUE st)
{
#ifdef WCOREDUMP
    int status = PST2INT(st);

    if (WCOREDUMP(status))
        return Qtrue;
    else
        return Qfalse;
#else
    return Qfalse;
#endif
}

Возвращает true, если stat сгенерировал дамп памяти при завершении. Недоступно на всех платформах.

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

    if (WIFEXITED(status))
        return Qtrue;
    else
        return Qfalse;
}

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

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

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

Возвращает восемь младших битов кода возврата stat. Доступно только если exited? равно true.

fork { }           #=> 26572
Process.wait       #=> 26572
$?.exited?         #=> true
$?.exitstatus      #=> 0

fork { exit 99 }   #=> 26573
Process.wait       #=> 26573
$?.exited?         #=> true
$?.exitstatus      #=> 99
inspect → строка Показать исходный код
static VALUE
pst_inspect(VALUE st)
{
    rb_pid_t pid;
    int status;
    VALUE vpid, str;

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

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

Переопределяет метод инспекции.

system("false")
p $?.inspect #=> "#<Process::Status: pid 12861 exit 1>"
pid → fixnum Показать исходный код
static VALUE
pst_pid(VALUE st)
{
    return rb_attr_get(st, id_pid);
}

Возвращает идентификатор процесса, который представляет этот объект статуса.

fork { exit }   #=> 26569
Process.wait    #=> 26569
$?.pid          #=> 26569
signaled? → true или false Показать исходный код
static VALUE
pst_wifsignaled(VALUE st)
{
    int status = PST2INT(st);

    if (WIFSIGNALED(status))
        return Qtrue;
    else
        return Qfalse;
}

Возвращает true, если stat завершился из-за необработанного сигнала.

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

    if (WIFSTOPPED(status))
        return Qtrue;
    else
        return Qfalse;
}

Возвращает true, если этот процесс остановлен. Это возвращается только в том случае, если соответствующий вызов wait имел установленный флаг WUNTRACED.

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

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

Возвращает номер сигнала, который привел к остановке stat (или nil, если self не остановлен).

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

    if (!WIFEXITED(status))
        return Qnil;
    return WEXITSTATUS(status) == EXIT_SUCCESS ? Qtrue : Qfalse;
}

Возвращает true, если stat успешен, false, если нет. Возвращает nil, если exited? не true.

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

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

Возвращает номер сигнала, который привел к завершению stat (или nil, если self не был завершен необработанным сигналом).

to_i → fixnum
to_int → fixnum
static VALUE
pst_to_i(VALUE st)
{
    return rb_ivar_get(st, id_status);
}

Возвращает биты в stat как Fixnum. Обращение к этим битам зависит от платформы.

fork { exit 0xab }         #=> 26566
Process.wait               #=> 26566
sprintf('%04x', $?.to_i)   #=> "ab00"
to_s → строка Показать исходный код
static VALUE
pst_to_s(VALUE st)
{
    rb_pid_t pid;
    int status;
    VALUE str;

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

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

Отображает pid и код выхода в виде строки.

system("false")
p $?.to_s         #=> "pid 12766 exit 1"

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

Spec-Zone.ru

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