ดี..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
ทำไมฉันจึงไม่ulimit
ดูหมิ่นฉันในแบบที่ป่าเถื่อน?
ดี..
$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192
ทำไมฉันจึงไม่ulimit
ดูหมิ่นฉันในแบบที่ป่าเถื่อน?
คำตอบ:
ulimit
เป็นเชลล์ / กระบวนการเฉพาะ ข้ามsudo
ไป
$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384
sudo
ไม่ได้ให้ข้อผิดพลาดเมื่อผ่านไปulimit
; โดยปกติจะต้องการไบนารีภายนอก แต่ulimit
เป็นเชลล์ในตัว
which ulimit
ตรวจสอบ ไม่มีอะไรน่าแปลกใจกับมัน
คำตอบของ Daniel Beck ไม่ได้บอกความจริงทั้งหมด (อันที่จริงแล้วมันเป็นมือที่ค่อนข้างคล่องแคล่ว) และไม่ได้ช่วยให้ผู้คนต้องการ "sudo ulimit"
ปัญหาคือว่า
ตัวอย่างของดาเนียลนั้นใช้ได้เฉพาะในสถานการณ์ที่เฉพาะเจาะจงเท่านั้น (ซึ่งโชคดีที่เป็นค่าเริ่มต้น)
counterexample:
$ ulimit -s 8191 # set both hard and soft limits
$ ulimit -s # show current soft limit
8191
$ ulimit -s 16384 # set both hard and soft limits
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
ดังนั้นคุณตั้งค่าขีด จำกัด ด้วยulimit -s
และนั่นก็ไปและตั้งค่าขีด จำกัด ทั้งแบบอ่อนและแข็ง ตอนนี้คุณถูกบล็อกไม่ให้ตั้งค่าให้สูงขึ้น
ณ จุดนี้คุณอาจคิดว่าจะลองsudo
; แต่มันใช้งานไม่ได้เพราะสิ่งที่ดาเนียลเขียน
$ sudo ulimit -s 16384 # maybe with sudo?
$ ulimit -s
8191
$
เกิดอะไรขึ้นที่นี่เป็นที่sudo
เริ่มต้นเปลือกใหม่ที่มันวิ่งulimit
; และในเชลล์นั้น ulimit ใหม่ถูกตั้งค่า แต่จากนั้นเปลือกหอยก็เสร็จสิ้นการทำงานถูกฉีกขาดและตอนนี้คุณกลับมาที่เปลือกก่อนหน้าของคุณด้วย ulimit ก่อนหน้านี้
พิสูจน์:
$ ulimit -s 8191
$ ulimit -s
8191
$ sudo bash
# ulimit -s
8191
# ulimit -s 16384
# ulimit -s # It worked!
16384
# exit
exit
$ ulimit -s # ... but now we're back to the old ulimit.
8191
$
ดังนั้นทำไมตัวอย่างของ Daniel จึงใช้ได้จริง เนื่องจากขีด จำกัด ฮาร์ดและซอฟต์เริ่มต้นของ ulimit ทำให้เขาสามารถดันขีด จำกัด ซอฟต์ไปที่ฮาร์ดได้ เราสามารถทำแบบสโลว์โมชั่นเพื่อแสดงเคล็ดลับ:
$ ulimit -Ss # show the Soft limit
8192
$ ulimit -Hs # show the Hard limit
65532
$ ulimit -s # by default, shows the Soft limit
8192
$ ulimit -s 16384 # set both the Soft and Hard limit
$ ulimit -s # shows the Soft limit
16384
$ ulimit -Hs # but, gotcha! the Hard limit has also been set
16384
$ ulimit -s 16385 # so now we can't go higher
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
$
โดยสรุป: หากคุณตั้งค่าขีด จำกัด สูงสุดของคุณและต้องการที่จะผลักดันมันขึ้นมาคุณจะไม่มีโชคในเชลล์นั้น ... เว้นแต่คุณจะอยู่ในฐานะผู้ใช้ระดับสูงหรือใช้คาถาเพื่อยกเลิกสิทธิ์ในภายหลัง
cd
คุณต้องการมีปัญหาเดียวกันกับ