Sinau perintah Linux - ngenteni

Jeneng

sabar, waitpid - ngenteni proses penghentian

Sinopsis

# include
#include

pid_t wait (int * status );
pid_t waitpid (pid_t pid , int * status , int options );

Gambaran

Fungsi tundha nggantungake eksekusi proses saiki nganti bocah wis metu, utawa nganti sinyal dikirim sing tumindak kanggo ngakhiri proses saiki utawa nelpon fungsi penanganan sinyal. Yen bocah wis metu saka wektu panggilan (proses "zombie" sing disebut), fungsi kasebut bakal bali maneh. Saben sumber daya sistem sing digunakake dening bocah dibebasake.

Fungsi waitpid nanggulangi eksekusi proses saiki nganti bocah sing ditemtokake dening argumen pid metu, utawa nganti sinyal dikirim sing nglakokake proses kasebut utawa nelpon fungsi penanganan sinyal. Yen bocah sing dijaluk oleh pid wis metu saka wektu panggilan (proses "zombie" sing disebut), fungsi kasebut langsung bali. Saben sumber daya sistem sing digunakake dening bocah dibebasake.

Nilai pid bisa dadi:

<-1

sing tegese kanggo ngenteni proses bocah sing proses klompok ID padha karo nilai absolut pid .

-1

sing tegese ngenteni proses bocah; iki prilaku sing padha tunggu pameran.

0

sing tegese ngenteni proses bocah sing proses klompok ID padha karo proses panggilan.

> 0

sing tegese ngenteni anak sing ID prosese padha karo nilai pid .

Nilai opsi yaiku UTAWA saka nol utawa luwih saka konstanta ing ngisor iki:

WNOHANG

sing tegese bisa bali kanthi cepet yen ora ana bocah sing metu.

WUNTRACED

sing tegese uga bali kanggo bocah sing mandheg, lan status sing durung dilapurake.

(Kanggo opsi mung Linux, pirsani ing ngisor iki.)

Yen status ora NULL , ngenteni utawa nyimpen informasi status waitpid ing lokasi sing dituding kanthi status .

Status iki bisa dievaluasi karo macro ing ngisor iki (macro kasebut njupuk buffer stat ( int ) minangka argumen --- ora minangka pointer menyang penyangga!):

WIFEXITED ( status )

iku non-nol yen bocah metu normal.

WEXITSTATUS ( status )

ngetokake sekuriti wolung bit sing paling penting sing diwatesi, sing uga wis disetel minangka argumen menyang telpon supaya metu () utawa minangka argumen kanggo statement bali ing program utama. Makro iki mung bisa dievaluasi yen WIFEXITED bali non-nol.

WIFSIGNALED ( status )

balik bener yen proses bocah metu amarga sinyal sing ora kejiret.

WTERMSIG ( status )

ngasilake nomer sinyal sing nyebabake proses anak wis rampung. Makro iki mung bisa dievaluasi yen WIFSIGNALED bali non-nol.

WIFSTOPPED ( status )

ngasilake bener yen proses anak sing ngasilake bali saiki mandheg; iki mung bisa ditindakake yen telpon kasebut rampung nggunakake WUNTRACED .

WSTOPSIG ( status )

ngasilake nomer sinyal sing nyebabake bocah bisa mandheg. Makro iki mung bisa dievaluasi yen WIFSTOPPED bali non-nol.

Sawetara versi Unix (umpamane Linux, Solaris, nanging ora AIX, SunOS) uga netepake WCOREDUMP makro ( status ) kanggo nguji apa proses anak mbuwang inti. Mung nggunakake iki terlampir ing #ifdef WCOREDUMP ... #endif.

Bali Value

ID proses saka bocah sing metu, utawa nol yen WNOHANG dipunginakaken lan ora ana anak sing kasedhiya, utawa -1 ing kesalahan (ing kasus iki errno disetel menyang nilai sing cocok).

Kasalahan

ECHILD

yen proses kasebut ing pid ora ana utawa ora anak saka proses panggilan. (Iki bisa kedadeyan kanggo anak dhewe yen tumindak kanggo SIGCHLD disetel menyang SIG_IGN. Deleng uga LINUX cathetan bagean babagan benang.)

EINVAL

yen argumentasi pilihan ora bener.

EINTR

yen WNOHANG ora disetel lan sinyal sing ora diblokir utawa SIGCHLD dijupuk .