cuốn sách gpt4 ai đã làm

linux - Lệnh thời gian được gửi trong trường tín hiệu dường như không hoạt động

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 01:37:34 25 4
mua khóa gpt4 Nike

Tôi đã thử nghiệm lệnh thời gian (/usr/bin/time). Tôi có lệnh thời gian chạy như sau

/usr/bin/time -v ngủ 30

Trên một thiết bị đầu cuối khác, tôi đã thực thi mộtps -a và tìm thấysleep PID của quá trình Bây giờ tôi sử dụngkill gửi tin nhắn đến quá trình ngủ - 1 PID Chấm dứt quá trình ngủ. Vì chế độ ngủ chạy theo thời gian nên nó liệt kê số liệu thống kê sử dụng tài nguyên như hiển thị bên dưới

Lệnh đang được hẹn giờ: "ngủ 30"
Thời gian sử dụng (giây): 0,00
Thời gian hệ thống (giây): 0,00
Phần trăm CPU mà công việc này nhận được: 0%
Thời gian đã trôi qua (đồng hồ treo tường) (h:mm:ss hoặc m:ss): 0:21.81
Kích thước văn bản được chia sẻ trung bình (kbyte): 0
Kích thước dữ liệu không chia sẻ trung bình (kbyte): 0
Kích thước ngăn xếp trung bình (kbyte): 0
Tổng kích thước trung bình (kbyte): 0
Kích thước tập hợp thường trú tối đa (kbyte): 2160
Kích thước tập hợp thường trú trung bình (kbyte): 0
Lỗi trang chính (yêu cầu I/O): 0
Lỗi trang nhỏ (lấy lại khung): 180
Chuyển đổi bối cảnh tự nguyện: 2
Chuyển đổi bối cảnh không tự nguyện: 2
Hoán đổi: 0
Đầu vào hệ thống tập tin: 0
Đầu ra hệ thống tập tin: 0
Tin nhắn ổ cắm đã gửi: 0
Đã nhận được tin nhắn ổ cắm: 0
Tín hiệu được gửi: 0
Kích thước trang (byte): 4096
Trạng thái thoát: 0

Tuy nhiên, thật ngạc nhiên, trường Tín hiệu đã gửi lại có số 0! Làm sao điều này có thể xảy ra?

biên tập:

Thay vào đó tôi đã thử đoạn script sau ngủ 30.

bẫy "tiếng vang xin chào" 1 2
ngủ 30

Bây giờ tôi tính thời gian cho đoạn script trên và gửi tín hiệu 1 và 2 tới nó. Trong trường hợp đó, trường Tín hiệu được phân phối vẫn là 0. Điều này khiến tôi kết luận rằng trường Tín hiệu đã gửi là 0 chứ không phải do tín hiệu không được xử lý.

câu trả lời hay nhất

Tôi đang sử dụng chương trình này:

#include 
#include
#include
#include

bộ đếm int không dấu dễ bay hơi = 0;

bộ xử lý thoát void(int signum)
{
_exit(1);
}

void ignhandler(int signum)
{
bộ đếm += dấu hiệu;
}

int main(int argc, char **argv)
{

độ trễ int;

tín hiệu (SIGHUP, bộ xử lý bỏ qua);
tín hiệu (SIGQUIT, bộ xử lý thoát);
for (độ trễ = atoi(argv[1] ); độ trễ > 0; ) {
độ trễ = ngủ (độ trễ);
}

printf("Bộ đếm=%u\n", bộ đếm);
return 0;
}

, tôi đã nhận được kết quả tương tự (rõ ràng là sau 11 THÚ VỊ):

Plasser@pisbak>$ Bộ đếm=11
Lệnh đang được tính thời gian: "./mysleep 20"
Thời gian sử dụng (giây): 0,00
Thời gian hệ thống (giây): 0,00
Phần trăm CPU mà công việc này nhận được: 0%
Thời gian đã trôi qua (đồng hồ treo tường) (h:mm:ss hoặc m:ss): 0:22.56
Kích thước văn bản được chia sẻ trung bình (kbyte): 0
Kích thước dữ liệu không chia sẻ trung bình (kbyte): 0
Kích thước ngăn xếp trung bình (kbyte): 0
Tổng kích thước trung bình (kbyte): 0
Kích thước tập hợp thường trú tối đa (kbyte): 1856
Kích thước tập hợp thường trú trung bình (kbyte): 0
Lỗi trang chính (yêu cầu I/O): 0
Lỗi trang nhỏ (lấy lại khung): 163
Chuyển đổi bối cảnh tự nguyện: 13
Chuyển đổi bối cảnh không tự nguyện: 1
Hoán đổi: 0
Đầu vào hệ thống tập tin: 0
Đầu ra hệ thống tập tin: 0
Tin nhắn ổ cắm đã gửi: 0
Đã nhận được tin nhắn ổ cắm: 0
Tín hiệu được gửi: 0
Kích thước trang (byte): 4096
Trạng thái thoát: 0
[1]+ Xong /usr/bin/time -v ./mysleep 20
Plasser@pisbak>$ man getrusage

Về linux - lệnh Trường thời gian được phân phối tín hiệu dường như không hoạt động, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/14479636/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress