Khi tôi chạy một lệnh ( make
trên một dự án lớn) từ shell, tôi có thể gõ Ctrl-Z để dừng quá trình và quay lại shell. Sau đó, tôi có thể chạy fg
để tiếp tục quá trình.
Tôi đang cố gắng viết một kịch bản shell để tự động hóa điều này (cụ thể là kiểm tra nhiệt độ CPU của tôi vài giây một lần và dừng quá trình nếu nó quá nóng, vì máy tính của tôi dễ bị quá nóng). Nỗ lực đầu tiên của tôi hoạt động như thế này (đơn giản hóa):
make &
subpid="$!"
sleep 2
# If the CPU temperature is too high...
kill -STOP "$subpid"
sleep 2
# If the CPU temperature has dropped to safe levels...
kill -CONT "$subpid"
wait "$subpid"
Thật không may, điều này đã không làm việc; gửi SIGSTOP đến quá trình đã không tạm dừng nó (như đã thấy rõ bằng cách tiếp tục gửi đầu ra đến thiết bị đầu cuối). Tôi đã chạy make &
ở dòng lệnh, gửi SIGSTOP và kiểm tra trạng thái quá trình với ps
; nó được liệt kê là đã dừng (và bắt đầu lại khi tôi gửi SIGCONT), nhưng nó vẫn tăng sản lượng và tăng nhiệt độ cốt lõi của tôi! Dừng nó bằng Ctrl-Z không bao giờ có vấn đề này, nhưng tôi không biết làm thế nào để thực hiện điều đó trong một tập lệnh.
Điều gì làm cho Ctrl-Z khác với kill -STOP
và làm cách nào tôi có thể có hành vi của cái trước trong tập lệnh shell?
make
đang được chạy đệ quy. Trong thực tế, tôi nghĩ rằng nó đi sâu một vài cấp độ.