เมื่อฉันรวบรวมสิ่งที่ฉันมักจะต้องการที่จะทำอย่างรวดเร็วดังนั้นในเวิร์กสเตชันของฉันฉันออก
make -j16
และ (gnu) make เริ่มการคอมไพล์ด้วย 16 คอร์ อย่างไรก็ตามเมื่อฉันกลับไปที่แล็ปท็อปของฉันฉันไม่มี 16 คอร์ที่นั่น ดังนั้นเมื่อฉันมีคำสั่งเดียวกันกับที่เครื่องของฉันค้างไว้จนตาย ฉันไม่สามารถเปลี่ยนเป็นเทอร์มินัลทางเลือกผ่าน CTRL + ALT + F1 เป็นต้นและการเข้าสู่ระบบระยะไกลจะไม่สำเร็จ CTRL + C, CTRL + 4 จะไม่มีการพิจารณาใด ๆ (BTW: การฆ่าอัตโนมัติจะไม่สำเร็จเช่นหน่วยความจำอัตโนมัติ) ฉันต้องปิดเครื่องแล้ว (ฉันใช้ Ubuntu 11.10 กับเคอร์เนล 3.0.x)
ทางออกหนึ่งคือการล่วงหน้าจำนวนแกนที่มีอยู่ในเครื่องปัจจุบันที่มีเป้าหมายทำให้ขนาดเล็กที่เป้าหมาย "ขนาน" อื่น ๆ ขึ้นอยู่และไม่ได้ใช้ "make -j $ NUMCORES" โดยตรง (ฉันได้ทำไปแล้วและรับรู้ด้วยโปรแกรม c ++ ขนาดเล็กโดยใช้บูสต์เธรด) แต่นี่จะไม่ปกป้องฉันจากการระบุ "make -j16" โดยไม่ตั้งใจอีกครั้ง
นอกจากนี้แกน "มากเกินไป" ต้องไม่เป็นจำนวนแกนเดียวกัน (รวมถึงแกนเกลียว) ที่มีอยู่เนื่องจาก +1 หรือ +2 เธรดจะไม่ฆ่าเครื่อง
ฉันสามารถใช้ ulimits เพื่อแก้ไขปัญหาได้หรือไม่ ผมว่าเกี่ยวกับการระบุการตั้งแลกเปลี่ยนพื้นที่เป็น 0 จากนั้นฉันก็ควรจะมีการเปลี่ยนแปลงเกี่ยวกับการยกเลิกฉันเดา
make -j16
จึงให้โอกาสในการฟื้นตัวเพียงเล็กน้อยเท่านั้น
export MAKEFLAGS="-j$(nproc)"
สามารถใช้; ไม่จำเป็นต้องใช้ makefiles พิเศษ สำหรับครั้งที่สองalias make="nice ionice make"
อาจ?