Linux командалык билүү - күтө

ысым

күтүп, waitpid - күтүп жараян токтотулган

Кыскача баяндама

#include <нүштөрдүн / types.h>
#include <нүштөрдүн / wait.h>

pid_t күтүү (INT * абалы);
pid_t waitpid (pid_t PID, ички * абалы, Int параметрлери);

баяндоо

Күтүү милдети бала тизмеден чейин учурдагы жараянынын аткарылышын токтото турат, же белги, анын иш-аракет учурдагы ишти токтотуу же белги ташуу милдетин чакырып салып чейин. Бала буга чалуу (а деп аталган "зомби" жараяны) доорунда менен кеткен болсо, милдети дароо кайтарат. Бала тарабынан пайдаланылган ар кандай системасы үчүн ресурстарды бошотот.

Waitpid милдети учурдагы жараянынын PID аргумент тарабынан кылмыш белгилери, ошондой эле бала тизмеден чейин, же белги, анын иш-аракет учурдагы ишти токтотуу же белги ташуу милдетин чакырып салып чейин аткарылышын токтото турат. PID өтүнүчү боюнча, ошондой эле бала эле чалуу (а деп аталган "зомби" жараяны) доорунда менен кеткен болсо, милдети дароо кайтарат. Бала тарабынан пайдаланылган ар кандай системасы үчүн ресурстарды бошотот.

PID мааниси бири болушу мүмкүн:

<-1

кайсы болбосун бала жүрүшүндө анын иши тобу ID PID абсолюттук маанисине барабар күтүп билдирет.

-1

кайсы болбосун бала жараянына күтүп билдирет; бул экспонаттарды күтүп эле жүрүм-турум болуп саналат.

0

бул ар бир бала, анын технологиялык тобу жараянына күтүп билдирет ID чалуу учурунда бул барабар.

> 0

бул алардын иш ID бала PID наркына барабар күтүп билдирет.

Тандоо наркы төмөндөгүдөй константаларынын нөлгө же андан ашык ЖЕ болуп саналат:

WNOHANG

бул эч бир бала тизмеден болсо, ошол замат кайра билдирет.

WUNTRACED

бул да токтоп, жана алардын статусу билдирди чыга элек балдар үчүн кайтып билдирет.

(Linux гана жолдору үчүн, төмөндө карагыла.)

Статусунда NULL эмес болуп жатса, күтө же жерде waitpid магазин Статус маалымат абалы менен көрсөттү.

Бул статусу төмөнкү макросторду менен бааланышы мүмкүн (бул макросторун статистика аймак (бир INT) Санитардык-бир көрсөткүчү эмес, --- аргумент катары алып!):

WIFEXITED (статусу)

бала, адатта, сыртта жардап тургандар болсо эмес нөлгө барабар.

WEXITSTATUS (статусу)

(чыгуу үчүн бир чалуу үчүн аргумент катары коюлган мүмкүн токтотулат бала, кайра кодексинин дегенде олуттуу сегиз биттен турган) же негизги программасы боюнча кайра билдирүүсүндө үчүн аргумент катары баалайт. WIFEXITED эмес нөлгө кайтып келе турган болсо, бул макро гана бааланышы мүмкүн.

WIFSIGNALED (статусу)

Бала иши үчүн кармалган эмес, белги менен сыртта жардап тургандар болсо, чыныгы кайтарат.

WTERMSIG (статусу)

Бала иши бузууга алып келген сигналдардын санын кайтарат. WIFSIGNALED эмес нөлгө кайтып келе турган болсо, бул макро гана бааланышы мүмкүн.

WIFSTOPPED (статусу)

кайтып келтирилген бала жараяны азыркы учурда токтоп калса, чыныгы кайтарып берет; чакыруу WUNTRACED аркылуу кылган болсо, бул мүмкүн эмес.

WSTOPSIG (статусу)

бала улам токтоп сигнал санын кайтарат. WIFSTOPPED эмес нөлгө кайтып келе турган болсо, бул макро гана бааланышы мүмкүн.

Кээ бир Unix түрү (мисалы, Linux, Solaris, бирок АИС, SunOS), ошондой эле бала жараян өзөгүн ташташат, жокпу, сынап үчүн макро WCOREDUMP (статусу) аныктайт. Бул #ifdef WCOREDUMP ... #endif тиркелген пайдаланууга гана берилет.

Return баасы

WNOHANG колдонулат жана эч бир бала бар болсо кетти, же нөлдүк баланын жараяны ID же -1 күнөөсү боюнча (иш катасы тиешелүү мааниге коюлса турган).

Каталар

ECHILD

эгерде кайра көрсөтүлгөн PID жок, же чалуу учурунда бир бала эмес. (Sigchld сигнал боюнча иш-чаралар SIG_IGN коюлса, анда бул өз баласы үчүн болушу мүмкүн. Ошондой эле, LINUX жип бөлүктө NOTES карагыла.)

EINVAL

Эгерде параметрлери аргумент жараксыз болгон.

Айнтрахт

Эгерде WNOHANG коюлган жана бөгөттөн белги же sigchld сигнал кармалган эмес.