Tìm hiểu lệnh Linux - chờ

Tên

chờ đợi, waitpid - chờ đợi cho quá trình chấm dứt

Tóm tắc

#include
#include

pid_t wait ( trạng thái int * );
pid_t waitpid ( trạng thái pid_t pid , int * , int );

Sự miêu tả

Chức năng chờ tạm dừng thực hiện quá trình hiện tại cho đến khi một đứa trẻ đã thoát, hoặc cho đến khi một tín hiệu được truyền đi có hành động là để chấm dứt quá trình hiện tại hoặc để gọi một chức năng xử lý tín hiệu. Nếu một đứa trẻ đã thoát khỏi thời gian của cuộc gọi (một cái gọi là "zombie" quá trình), chức năng trả về ngay lập tức. Bất kỳ tài nguyên hệ thống nào được trẻ sử dụng đều được giải phóng.

Chức năng waitpid đình chỉ thực hiện của quá trình hiện tại cho đến khi một đứa trẻ được chỉ định bởi đối số pid đã thoát, hoặc cho đến khi một tín hiệu được phân phối có hành động là để chấm dứt quá trình hiện tại hoặc để gọi một chức năng xử lý tín hiệu. Nếu một đứa trẻ theo yêu cầu của pid đã được thoát khỏi thời gian của cuộc gọi (một cái gọi là "zombie" quá trình), chức năng trả về ngay lập tức. Bất kỳ tài nguyên hệ thống nào được trẻ sử dụng đều được giải phóng.

Giá trị của pid có thể là một trong số:

<-1

có nghĩa là chờ cho bất kỳ quá trình con nào có ID nhóm tiến trình bằng với giá trị tuyệt đối của pid .

-1

có nghĩa là chờ đợi cho bất kỳ quá trình con nào; đây là hành vi tương tự chờ đợi các cuộc triển lãm.

0

có nghĩa là chờ đợi cho bất kỳ quá trình con nào có ID nhóm tiến trình bằng với quy trình gọi điện.

> 0

có nghĩa là chờ đứa trẻ có ID tiến trình bằng với giá trị của pid .

Giá trị của các tùy chọn là một OR bằng 0 hoặc nhiều hằng số sau:

WNOHANG

có nghĩa là quay trở lại ngay lập tức nếu không có đứa trẻ nào đã thoát.

WUNTRACED

có nghĩa là cũng trả lại cho trẻ em bị dừng lại, và có tình trạng chưa được báo cáo.

(Đối với các tùy chọn chỉ dành cho Linux, xem bên dưới.)

Nếu trạng thái không phải là NULL , hãy đợi hoặc chờ thông tin trạng thái cửa hàng ở vị trí được chỉ báo theo trạng thái .

Trạng thái này có thể được đánh giá bằng các macro sau (các macro này lấy bộ đệm stat ( int ) làm đối số --- không phải là con trỏ tới bộ đệm!):

WIFEXITED ( trạng thái )

không khác nếu đứa trẻ đã thoát bình thường.

WEXITSTATUS ( trạng thái )

đánh giá đến 8 bit ít nhất có ý nghĩa của mã trả về của con bị chấm dứt, có thể được đặt làm đối số cho lệnh gọi để thoát () hoặc làm đối số cho câu lệnh trả về trong chương trình chính. Macro này chỉ có thể được đánh giá nếu WIFEXITED trả về khác không.

WIFSIGNALED ( trạng thái )

trả về true nếu quá trình con thoát vì tín hiệu không bị bắt.

WTERMSIG ( trạng thái )

trả về số lượng tín hiệu gây ra quá trình con chấm dứt. Macro này chỉ có thể được đánh giá nếu WIFSIGNALED trả về khác không.

WIFSTOPPED ( trạng thái )

trả về true nếu quá trình con gây ra sự trở lại hiện tại bị dừng lại; điều này chỉ có thể thực hiện được nếu cuộc gọi được thực hiện bằng WUNTRACED .

WSTOPSIG ( trạng thái )

trả về số lượng tín hiệu khiến trẻ dừng lại. Macro này chỉ có thể được đánh giá nếu WIFSTOPPED trả về khác không.

Một số phiên bản của Unix (ví dụ như Linux, Solaris, nhưng không phải AIX, SunOS) cũng định nghĩa một macro WCOREDUMP ( trạng thái ) để kiểm tra xem liệu quá trình con có được đổ bỏ lõi hay không. Chỉ sử dụng giá trị này trong #ifdef WCOREDUMP ... #endif.

Giá trị trả lại

ID quá trình của đứa trẻ đã thoát hoặc bằng 0 nếu WNOHANG được sử dụng và không có con, hoặc -1 do lỗi (trong trường hợp đó errno được đặt thành giá trị thích hợp).

Lỗi

ECHILD

nếu quy trình được chỉ định trong pid không tồn tại hoặc không phải là con của quá trình gọi. (Điều này có thể xảy ra cho con của chính mình nếu hành động cho SIGCHLD được đặt thành SIG_IGN. Xem thêm phần LINUX NOTES về chủ đề.)

EINVAL

nếu đối số tùy chọn không hợp lệ.

EINTR

nếu WNOHANG không được thiết lập và một tín hiệu bị khóa hoặc một SIGCHLD đã bị bắt.