class Process::Status
Ein Process::Status enthält Informationen über einen Systemprozess.
Die Thread-lokale Variable $? ist initial nil. Einige Methoden weisen ihr ein Process::Status-Objekt zu, das einen Systemprozess repräsentiert (entweder laufend oder beendet).
`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
Öffentliche Klassenmethoden
Source
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);
}
Ähnlich wie Process.wait, gibt jedoch ein Process::Status-Objekt zurück (anstelle einer Integer-PID oder nil); siehe Process.wait für die Werte von pid und flags.
Wenn Kindprozesse vorhanden sind, wartet auf das Beenden eines Kindprozesses und gibt ein Process::Status-Objekt zurück, das Informationen über diesen Prozess enthält; setzt die Thread-lokale Variable $?.
Process.spawn('cat /nop') # => 1155880 Process::Status.wait # => #<Process::Status: pid 1155880 exit 1> $? # => #<Process::Status: pid 1155508 exit 1>
Wenn kein Kindprozess vorhanden ist, gibt ein "leeres" Process::Status-Objekt zurück, das keinen tatsächlichen Prozess repräsentiert; setzt die Thread-lokale Variable $? nicht.
Process::Status.wait # => #<Process::Status: pid -1 exit 0> $? # => #<Process::Status: pid 1155508 exit 1> # Unchanged.
Kann den Scheduler-Hook Fiber::Scheduler#process_wait aufrufen.
Nicht auf allen Plattformen verfügbar.
Öffentliche Instanzmethoden
Source
static VALUE
pst_equal(VALUE st1, VALUE st2)
{
if (st1 == st2) return Qtrue;
return rb_equal(pst_to_i(st1), st2);
}
Gibt zurück, ob der Wert von to_i == other ist.
`cat /nop` stat = $? # => #<Process::Status: pid 1170366 exit 1> sprintf('%x', stat.to_i) # => "100" stat == 0x100 # => true
Source
static VALUE
pst_wcoredump(VALUE st)
{
#ifdef WCOREDUMP
int status = PST2INT(st);
return RBOOL(WCOREDUMP(status));
#else
return Qfalse;
#endif
}
Gibt true zurück, wenn der Prozess beim Beenden einen Coredump erzeugt hat, andernfalls false.
Nicht auf allen Plattformen verfügbar.
Source
static VALUE
pst_wifexited(VALUE st)
{
int status = PST2INT(st);
return RBOOL(WIFEXITED(status));
}
Gibt true zurück, wenn der Prozess normal beendet wurde (z. B. durch einen exit()-Aufruf oder das Beenden des Programms), andernfalls false.
Source
static VALUE
pst_wexitstatus(VALUE st)
{
int status = PST2INT(st);
if (WIFEXITED(status))
return INT2NUM(WEXITSTATUS(status));
return Qnil;
}
Gibt die niedrigstwertigen acht Bits des Rückgabecodes des Prozesses zurück, wenn er beendet wurde; andernfalls nil.
`exit 99` $?.exitstatus # => 99
Source
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;
}
Gibt eine String-Repräsentation von self zurück.
system("false") $?.inspect # => "#<Process::Status: pid 1303494 exit 1>"
Source
static VALUE
pst_pid_m(VALUE self)
{
rb_pid_t pid = pst_pid(self);
return PIDT2NUM(pid);
}
Gibt die Prozess-ID des Prozesses zurück.
system("false") $?.pid # => 1247002
Source
static VALUE
pst_wifsignaled(VALUE st)
{
int status = PST2INT(st);
return RBOOL(WIFSIGNALED(status));
}
Gibt true zurück, wenn der Prozess aufgrund eines nicht abgefangenen Signals beendet wurde, andernfalls false.
Source
static VALUE
pst_wifstopped(VALUE st)
{
int status = PST2INT(st);
return RBOOL(WIFSTOPPED(status));
}
Gibt true zurück, wenn dieser Prozess angehalten ist und der entsprechende wait-Aufruf das Flag Process::WUNTRACED gesetzt hatte, andernfalls false.
Source
static VALUE
pst_wstopsig(VALUE st)
{
int status = PST2INT(st);
if (WIFSTOPPED(status))
return INT2NUM(WSTOPSIG(status));
return Qnil;
}
Gibt die Nummer des Signals zurück, das den Prozess angehalten hat, oder nil, wenn der Prozess nicht angehalten ist.
Source
static VALUE
pst_success_p(VALUE st)
{
int status = PST2INT(st);
if (!WIFEXITED(status))
return Qnil;
return RBOOL(WEXITSTATUS(status) == EXIT_SUCCESS);
}
Gibt zurück
-
true, wenn der Prozess erfolgreich abgeschlossen und beendet wurde. -
false, wenn der Prozess erfolglos abgeschlossen und beendet wurde. -
nil, wenn der Prozess nicht beendet wurde.
Source
static VALUE
pst_wtermsig(VALUE st)
{
int status = PST2INT(st);
if (WIFSIGNALED(status))
return INT2NUM(WTERMSIG(status));
return Qnil;
}
Gibt die Nummer des Signals zurück, das den Prozess beendet hat, oder nil, wenn der Prozess nicht durch ein nicht abgefangenes Signal beendet wurde.
Source
static VALUE
pst_to_i(VALUE self)
{
int status = pst_status(self);
return RB_INT2NUM(status);
}
Gibt den systemabhängigen Integer-Status von self zurück.
`cat /nop` $?.to_i # => 256
Source
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;
}
Gibt eine String-Repräsentation von self zurück.
`cat /nop` $?.to_s # => "pid 1262141 exit 1"