ฉันจะเค้นคำสั่งในหน้าต่างเทอร์มินัลได้อย่างไร?


9

ฉันต้องวิ่งconvertด้วยภาพจำนวนมากในเวลาเดียวกัน คำสั่งใช้เวลาสักครู่ แต่สิ่งนี้ไม่ได้รบกวนฉัน

ปัญหาคือว่าคำสั่งนี้ทำให้คอมพิวเตอร์ของฉันไม่สามารถใช้งานได้ในขณะที่คำสั่งกำลังทำงาน (ประมาณ 15 นาที)

ดังนั้นจึงเป็นไปได้ที่จะเค้นคำสั่งโดย จำกัด ทรัพยากร (ตัวประมวลผลและหน่วยความจำ) ให้กับคำสั่งโดยตรงจากบรรทัดคำสั่งหรือไม่ สิ่งนี้สามารถทำงานได้ถ้าฉันเพิ่มบางอย่างในบรรทัดเดียวกันก่อนกดEnterเพราะเมื่อฉันเริ่มกระบวนการคอมพิวเตอร์ช้ามากจนเป็นไปไม่ได้เช่นสลับไปที่ "System monitor" และลดความสำคัญ

แก้ไข: ผลลัพธ์ top และ iotop

ฉันจัดการเพื่อเรียกใช้topและsudo iotop >iotop.txtในขณะที่ทำการดำเนินการแปลงอย่างใดอย่างหนึ่ง (ไฟล์ iotop.txt ที่สร้างนั้นอ่านยาก)

ผลลัพธ์ของด้านบน:

   PID ผู้ใช้ PR NI VIRT RES SHR S% CPU% MEM TIME + คำสั่ง           
14275 ชื่อผู้ใช้ 20 0 4043m 3.0g 1448 D 7.0 80.4 0: 16.45 Conversion 

ผลลัพธ์ของไอโซโทป:

[? 1049h [1; 24r (B [m [4l [? 7h [? 1h =] 39; 49m [? 25l [39; 49m (B [m [H] 2JTotal DISK อ่าน): 1269.04 K / s | รวมดิสก์เขียน : [59G0.00 B / s
(B [0; 7m TID PRIO USER DISK] อ่าน DISK WRITE SWAPIN (B [0; 1; 7m IO>> B [0; 7m คำสั่ง [3; 2H (B [m2516 เป็น / 4 ชื่อผู้ใช้ 350.08 K / s 0.00 B / s s 0.00% 0.00% zeitgeist-datahub
 7394 เป็น / 4 ชื่อผู้ใช้ 568.88 K / s 0.00 B / s 77.41% 0.00% - แสดงผล ~ .530483991 [5; 1H14275 ชื่อผู้ใช้ว่าง 350.08 K / s 0.00 B / s 37.49% 0.00% แปลง S ~ f test.pdf [6 ; 2H2048 เป็น / 4 รูต [6; 24H0.00 B / s 0.00 B / s 0.00% 0.00% [kworker / 3: 2]
[5G1 เป็น / 4 รูต [7; 24H0.00 B / s 0.00 B / s 0.00% 0.00% init

นอกจากนี้แม้ว่ากระบวนการจะสิ้นสุดลงคอมพิวเตอร์ก็จะไม่กลับไปสู่ประสิทธิภาพเดิม ฉันพบวิธีแก้ไขปัญหานี้โดยการวิ่งsudo swapoff -aตามด้วยsudo swapon -a

คำตอบ:


5

โอ้เด็กชายฉันเพิ่งจะได้สิ่งนี้ ... อ้างอิงข้อความ:

นอกจากนี้แม้ว่ากระบวนการจะสิ้นสุดลงคอมพิวเตอร์ก็จะไม่กลับไปสู่ประสิทธิภาพเดิม ฉันพบวิธีแก้ไขปัญหานี้โดยการวิ่งsudo swapoff -aตามด้วยsudo swapon -a

ตกลงดังนั้นหมายความว่าคุณกำลังใช้ RAM ที่มีอยู่หมดในระบบของคุณซึ่งหมายความว่าคุณเพียงแค่พยายามที่จะเรียกใช้convertกระบวนการมากเกินไปในคราวเดียว เราจำเป็นต้องดูไวยากรณ์ที่แท้จริงของคุณในการวางไข่convertเพื่อให้คำแนะนำ แต่โดยทั่วไปคุณต้องแน่ใจว่าคุณไม่ได้พยายามเปิดกระบวนการที่เกิดขึ้นพร้อมกันมากกว่าที่คุณมี RAM เพื่อจัดการอย่างสะดวกสบาย

เนื่องจากคุณระบุสิ่งที่ทำให้เกิดสิ่งนี้convert *.tif blah.pdfสิ่งที่เกิดขึ้นคือเนื้อหาของทุกไฟล์ TIF และการแปลงเป็น PDF กำลังถูกยัดเข้าไปใน RAM พร้อมกัน สิ่งที่คุณต้องทำคือแยกงานออกเพื่อให้ไม่จำเป็น ความเป็นไปได้อย่างหนึ่งที่คุณควรนึกถึงคือทำสิ่งที่ต้องการแทนที่จะทำfind . -iname '*.tif' | xargs -I% convert % %.pdfแล้วใช้pdftkหรือทำอะไรทำนองนั้นเพื่อกาวไฟล์ PDF แต่ละไฟล์ด้วยกัน หากคุณจริงๆต้องการได้รับแฟนซีและคุณมีซีพียูแบบมัลติคอร์นี้ยังช่วยให้คุณมีโอกาสที่จะเขียนสคริปต์ขนาดเล็กเพื่อการแปลงทำงานในกระบวนการของnที่nคือจำนวนของแกนและได้รับสิ่งที่ทั้งทำอย่างมีนัยสำคัญได้เร็วขึ้น . :)

pdftk วิธีใช้: http://ubuntuhowtos.com/howtos/merge_pdf_files (โดยทั่วไปแล้วจะลดลงไปsudo apt-get install pdftk; pdftk *.pdf cat output merged.pdf)


ฉันเพิ่งใช้งานครั้งละหนึ่งconvert *.tif bla.pdfกระบวนการ แต่อินพุตเป็นรูปภาพ tif ทั้งหมด มันเป็นวิธีการสร้าง pdf หนึ่งไฟล์จากรูปภาพจำนวนมากที่ทำงานได้ดี แต่ดับพีซีของฉัน
ถึง

^^ ดูแก้ไขคำตอบกรุณา :)
จิมพ่อค้าเกลือ

สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบด้วยการดัดแปลงง่ายๆ แทนfind . -iname '*.tif' | xargs -I% convert % %.pdf find . -iname '*.pdf' | xargs -I% convert % %.pdfมันเร็วเกินไป! ขอบคุณ
ถึงทำ

ขออภัยความผิดปกติระหว่างสมองและนิ้วมือ :-)
Jim Salter

หนึ่งการปรับเปลี่ยนเล็ก ๆ ... มันเป็นสิ่งที่ดีที่จะรู้เกี่ยวกับ-execและตัวเลือกสำหรับการ-execdir findในกรณีของคุณแทนที่จะใช้xargsฉันจะใช้:find -iname '*.tif' -execdir convert {} {}.pdf ';'
Paddy Landau

12

man niceและถ้าคุณต้องการ I / O man ioniceการควบคุมปริมาณ

ลองดูตัวอย่างง่ายๆ

ปริมาณการใช้ซีพียู:

you@box:/$ nice -n 10 /usr/bin/convert blah.gif blah.jpg

อย่างไรก็ตามจากคำอธิบายของคุณการใช้งาน CPU นั้นไม่ใช่ปัญหาที่แท้จริงของคุณที่นี่ มีโอกาสมากขึ้นที่คุณมีการแข่งขัน I / O อย่างรุนแรง

ปริมาณการใช้ดิสก์:

you@box:/$ ionice -c2 -n7 /usr/bin/convert blah.gif blah.jpg

-c2คือ "ความพยายามที่ดีที่สุด" และ-n7สำคัญที่สุดคือ "ความพยายามที่ดีที่สุด" ดังนั้นสิ่งนี้จะเร่งงานให้ลด I / O ที่มีลำดับความสำคัญต่ำกว่าสิ่งอื่น ๆ ส่วนใหญ่ในระบบ

you@box:/$ ionice -c3 /usr/bin/convert blah.gif blah.jpg

-c3(ไม่จำเป็นต้องมีระดับความสำคัญสูง) หมายถึง "ว่างเท่านั้น" งานตั้งค่าที่จะ-c3ใช้เวลาเพียงการจัดตารางเวลาดิสก์ไม่ได้ใช้งานอย่างอื่นแทบไม่มีผลกระทบที่ทั้งหมดในระบบ - แต่อาจมากเวลาดำเนินการอีกต่อไปสำหรับงานของคุณขึ้นอยู่กับว่าไม่ว่างส่วนที่เหลือของระบบที่ได้รับ


ฉันจะรวมniceเข้ากับคำสั่งแปลงอย่างไร ถ้าฉันไม่ผิดพลาดก็ดีใช้ได้กับกระบวนการที่กำลังทำงานอยู่
ถึงทำ

1
ดูด้านบน ... นอกจากนี้ srsly อ่านหน้าคน มันเป็นหน้าคนง่ายมากไม่หนึบเลย :-)
Jim Salter

ฉันลองแล้ว เรียงลำดับจากความช่วยเหลือ แต่ไม่เพียงพอ ฉันจะลองnice -n 20ครั้งต่อไป
ถึง

สุจริตฉันไม่แน่ใจเกินไปว่าการโหลด CPU เป็นปัญหาของคุณที่นี่ คุณได้ลองทำiotopในขณะที่ใช้กระบวนการหรือไม่ โดยปกติแล้วกระบวนการที่ใช้ CPU จำนวนมากจะมีผลเพียงเล็กน้อยต่อการใช้งานของระบบ แต่กระบวนการที่ใช้ฮาร์ดไดรฟ์อาจทำให้ทุกอย่างหยุดอย่างรวดเร็วโดยเฉพาะอย่างยิ่งถ้าคุณใช้ไดรฟ์ทั่วไปไม่ใช่ SSD
Jim Salter

เนื่องจากระบบทั้งหมดไม่สามารถใช้งานได้กับคุณคุณอาจลองทำอะไรซักอย่างในสายของconvert blah.gif blah.jpg & iotopมันเพื่อที่iotopจะไฟขึ้นทันทีที่คุณเริ่มconvertงาน
Jim Salter

2

นี่เป็นบทความที่ดีเกี่ยวกับการใช้โปรแกรมที่เรียกว่าcpulimitจำกัด การใช้ cpu ของกระบวนการใด ๆ :

http://maketecheasier.com/limit-cpu-usage-of-any-process-in-linux/2010/09/22

ปัญหาเป็นเหมือนที่คุณพูดว่าการค้นหา PID ของconvertกระบวนการหลังจากที่เริ่มต้นขึ้น

หลังจากเริ่มต้นconvertหากคุณยังคงสามารถพิมพ์คำสั่งในเทอร์มินัลคุณสามารถเรียกใช้ps aux | grep convertเพื่อค้นหาว่าเป็น PID จากนั้นsudo cpulimit -p PID -l CPU%เพื่อเริ่มการควบคุมปริมาณ

หรือหากการเริ่มต้นconvertยังล็อคเทอร์มินัลบทความของคุณจะแสดงวิธีที่คุณสามารถเรียกใช้cpulimitเป็น daemon พื้นหลังที่จะตรวจสอบและเค้นกระบวนการโดยอัตโนมัติผ่านการใช้งาน CPU จำนวนหนึ่ง โชคดี!


สคริปต์นี้เป็นความคิดที่ไม่ดีและดั้งเดิมเมื่อเปรียบเทียบกับniceคำสั่งในตัว cpulimitจะ จำกัด กระบวนการในการใช้งาน CPU% ใด ๆ ไม่ว่าจะมีอะไรอีกหรือไม่ที่ต้องการเวลา CPU; niceในทางตรงกันข้ามให้ตั้งระดับความสำคัญ (รวม 40!) ซึ่งอนุญาตให้จัดลำดับความสำคัญของงานด้านบน (หรือด้านล่าง) อื่น ๆ
Jim Salter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.