จะทราบได้อย่างไรว่าคำสั่งใดที่ถูกเรียกใช้โดยไม่หยุด?


20

ในตัวอย่างของฉันฉันใช้คำสั่งที่ใช้เวลานานมากในการดำเนินการ (หลายชั่วโมง)

ฉันจำไม่ได้จริงๆถ้าฉันป้อน make หรือ make -j4

แน่นอนฉันสามารถหยุดมันและกดปุ่มหรือตรวจสอบประวัติเพื่อทราบ แต่จะหยุดกระบวนการและฉันไม่ต้องการที่จะเกิดขึ้น (ในกรณีที่มันได้ทำ -j4)

มีวิธีใดที่จะทราบว่าคำสั่งใดที่ถูกเรียกใช้งานโดยไม่หยุดกระบวนการ?


5
จากเทอร์มินัลอื่นลองpgrep -a make
John1024

2
ในกรณีที่makeคุณสามารถหยุดและเริ่มต้นใหม่ได้และควรเลือกตำแหน่งที่ค้างไว้
user253751

คำตอบ:


34

หากคุณต้องการดูบรรทัดคำสั่งแบบเต็มสำหรับทุกอินสแตนซ์makeที่ทำงานบนคอมพิวเตอร์ของคุณให้เปิดเทอร์มินัลใหม่แล้วลอง:

pgrep -a make

pgrepเป็นโปรแกรมที่ค้นหากระบวนการทั้งหมดในคอมพิวเตอร์ของคุณ makeในกรณีนี้ก็คือการมองหาโปรแกรมชื่อ ตัวเลือก-aบอกpgrepให้แสดงทั้ง ID กระบวนการและบรรทัดคำสั่งแบบเต็มสำหรับแต่ละกระบวนการที่ตรงกัน (โดยไม่ต้อง-aมันก็จะกลับกระบวนการ ID.) สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกมากมาย pgrep man pgrepให้ดู


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

28

ในขณะที่หน้าต่าง terminal มีการใช้งานคุณสามารถหยุดการทำงานชั่วคราว (ระงับ) กระบวนการโดยการกด+Ctrl Zจากนั้นคุณสามารถผลักงานในเบื้องหลังโดยพิมพ์bg(ตอนนี้งานของคุณจะดำเนินการต่อในพื้นหลังและคุณสามารถทำงานในบรรทัดคำสั่งได้พร้อมกันซึ่งเทียบเท่ากับการเริ่มงานด้วย&เมื่อสิ้นสุดบรรทัดคำสั่ง) จากนั้นใช้ลูกศรเคอร์เซอร์ (ขึ้นและลง) เพื่อดูคำสั่งที่คุณใช้ หากคุณต้องการ ( แต่ไม่จำเป็น) fgแล้วคุณจะได้รับงานของคุณเพื่อเบื้องหน้าโดยการพิมพ์


7
สิ่งนี้ใช้ได้กับบางคำสั่ง แต่ไม่ใช่ทั้งหมด ตัวอย่างเช่นหากคุณพิมพ์วนซ้ำเช่นfor X in {1..1000} ; do sleep $X ; doneนั้นห่วงจะถูกขัดจังหวะและการวนซ้ำที่เหลือจะไม่เกิดขึ้น
kasperd

11
@kasperd ใช่น่ารำคาญมากถ้าคุณถามฉัน แต่ฉันค้นพบวิธีแก้ปัญหาที่ยอดเยี่ยมสำหรับปัญหานั้น ล้อมรอบคำสั่งที่ซับซ้อนเช่นนั้นในวงเล็บดังนั้นจึงเป็น subshell จากนั้น Ctrl-Z จะระงับ subshell ทั้งหมดและดำเนินการต่ออย่างถูกต้อง
penguin359

@kasperd ไม่ได้อยู่ในการทุบตี แต่พวกเขาทำใน zsh
JoL

4
ไม่จำเป็นต้องใส่ทำงานเป็นพื้นหลัง: มันเพียงพอที่จะระงับมันตรวจสอบประวัติ (หรือjobsตามที่ปรากฏในคำตอบ @ Ichabod) fgและจากนั้นก็กลับมาทำงานผ่านทาง
Konrad Rudolph

10

ฉันทำอะไรเช่นสเตฟาน: ^ Z jobsเพื่อหยุดงานและจากนั้นผมทำงาน หากคุณมีหลายกระบวนการที่กำลังทำงานอยู่คุณอาจต้องแยกแยะว่างานใดเป็นงานที่คุณหยุดชั่วคราว แต่โดยทั่วไปจะให้บรรทัดคำสั่ง จากนั้นเรียกใช้fgเพื่อดำเนินการต่อ


1

วิธีที่ดีในการดูสิ่งนี้แบบไดนามิกคือการรันบนและสิ่งนี้จะบอกสถานะระบบโดยรวมและกระบวนการที่กำลังทำงานอยู่บนระบบ

การทำ 'ps ux' แสดงกระบวนการของคุณพร้อมกับ pid และข้อมูลอื่น ๆ คุณสามารถใช้ทักษะในการฆ่าพวกมันออกหากคุณต้องการ man page สำหรับสิ่งนั้นคือทรัพยากรที่ดี หยุดทำงานในอุปกรณ์รอ ฯลฯ คุณยังสามารถส่งสัญญาณอื่น ๆ ไปยังกระบวนการเช่น -hup, รับ daemons รีสตาร์ทเป็นต้น

ด้านบนเป็นสิ่งที่ดีเพราะมันจะแสดงขนาดกระบวนการเวลาที่ผ่านไปและสถานะซีพียูปัจจุบันและหน่วยความจำและการสลับ

ฉันมักจะทำ $ make> & make.out & และน้อยกว่าหรือตามท้าย -f ในไฟล์บันทึก make.out ตั้งแต่ตอนนี้ make ถูกถอดออกเป็นกระบวนการจากเซสชันเชลล์ของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.