Khi tôi biên dịch công cụ, tôi thường muốn thực hiện việc này nhanh chóng, vì vậy trên máy trạm của tôi, tôi gặp sự cố
make -j16
Và (gnu) bắt đầu biên dịch với 16 lõi. Tuy nhiên, khi tôi quay lại máy tính xách tay, tôi không có 16 lõi. Vì vậy, khi tôi phát hành lệnh tương tự, máy của tôi đóng băng đến chết. Tôi không thể chuyển sang thiết bị đầu cuối thay thế thông qua CTRL + ALT + F1, v.v., cũng không đăng nhập từ xa sẽ thành công. CTRL + C, CTRL + 4 không ai trong số họ sẽ được xem xét. (BTW: không có chức năng tự động tắt nào sẽ thành công, ví dụ: tự động hết bộ nhớ) Tôi phải tắt máy sau đó. (Tôi sử dụng Ubuntu 11.10 với kernel 3.0.x)
Một giải pháp là lấy trước số lượng lõi có sẵn trên máy hiện tại với một mục tiêu nhỏ, trong đó mọi mục tiêu "song song" khác phụ thuộc và không sử dụng trực tiếp "make -j $ NUMCORES". (Tôi đã thực hiện điều đó và nhận ra với một chương trình c ++ nhỏ bằng cách sử dụng các luồng tăng cường). Nhưng điều này sẽ không bảo vệ tôi khỏi việc vô tình chỉ định "make -j16" một lần nữa.
Ngoài ra, "quá nhiều" lõi không được có cùng số lõi (bao gồm cả lõi luồng) như có sẵn, vì các luồng +1 hoặc +2 sẽ vẫn không giết chết máy.
Tôi có thể sử dụng ulimits để kiểm duyệt vấn đề? Tôi mặc dù về việc chỉ định đặt không gian hoán đổi thành 0. Sau đó tôi nên có một thay đổi khi hủy bỏ tôi phỏng đoán .
make -j16
, nó chỉ cung cấp cho một cơ hội nhỏ để phục hồi.
export MAKEFLAGS="-j$(nproc)"
có thể được sử dụng; không cần makefiles đặc biệt. Cho lần thứ hai,alias make="nice ionice make"
có lẽ?