คำถามติดแท็ก job-control

คำถามเกี่ยวกับวิธีต่างๆที่เชลล์สามารถควบคุมงานได้: การระงับการทำงานต่อการยกเลิกการดำเนินการเป็นต้น


5
วิธีหยุดชั่วคราวและนำกระบวนการพื้นหลังมาทำงานเบื้องหน้า
ฉันมีกระบวนการที่ทำงานอยู่เบื้องหน้า ฉันหยุดทำงานโดยCtrl+ Zจากนั้นให้ทำงานในพื้นหลังbg <jobid>ต่อ ฉันสงสัยว่าจะระงับกระบวนการที่ทำงานในพื้นหลังได้อย่างไร ฉันจะนำกระบวนการพื้นหลังมาสู่เบื้องหน้าได้อย่างไร แก้ไข: กระบวนการส่งออกไปยัง stderr ดังนั้นฉันจะออกคำสั่งfg <jobid>ในขณะที่กระบวนการส่งออกไปยังเทอร์มินัลได้อย่างไร

9
ฉันจะปฏิเสธกระบวนการที่กำลังทำงานอยู่และเชื่อมโยงกับเชลล์หน้าจอใหม่ได้อย่างไร
ฉันมีโปรแกรมที่ทำงานบนเชลล์ SSH ฉันต้องการหยุดมันชั่วคราวและสามารถหยุดการหยุดชั่วคราวเมื่อฉันกลับมา วิธีหนึ่งที่ฉันคิดว่าทำคือโอนความเป็นเจ้าของไปยังหน้าจอเชลล์ดังนั้นทำให้มันทำงานอยู่ในนั้น มีวิธีอื่นในการดำเนินการต่อหรือไม่?

2
วิธีหยุดชั่วคราวและดำเนินกระบวนการต่อ
ใน bash เทอร์มินัลฉันสามารถกดControl+ Zเพื่อหยุดกระบวนการทำงานใด ๆ ... จากนั้นฉันสามารถพิมพ์fgเพื่อดำเนินการกระบวนการต่อ เป็นไปได้หรือไม่ที่จะระงับกระบวนการหากฉันมี PID เท่านั้น และถ้าเป็นเช่นนั้นฉันควรใช้คำสั่งอะไร ฉันกำลังมองหาสิ่งที่ชอบ: suspend-process $PID_OF_PROCESS แล้วจึงกลับมาทำงานอีกครั้งด้วย resume-process $PID_OF_PROCESS


7
ฉันจะปิดเทอร์มินัลโดยไม่ฆ่าลูก ๆ ของมันได้อย่างไร
บางครั้งฉันเรียกใช้แอปใน gnome-terminal แต่ทันใดนั้นฉันต้องรีสตาร์ท gnome หรือบางอย่าง ฉันเดาว่าคำตอบสำหรับคำถามนั้นมีประโยชน์แล้วฉันต้องการตัดการเชื่อมต่อจาก SSH ซึ่งมีบางอย่างเกิดขึ้น แผนผังต้นไม้ของ Gnome มีลักษณะเช่นนี้: gnome-terminal bash some-boring-process ฉันสามารถ 'แยก' ออกbashจากgnome-terminal(หรือแยกออกsome-boring-processจากการทุบตีและเปลี่ยนเส้นทางผลลัพธ์ของมันไปที่อื่นได้หรือไม่) ถ้าฉันเพิ่งฆ่าgnome-terminalมันbashจะถูกฆ่าเพื่อกระบวนการย่อยทั้งหมดของมัน

4
วัตถุประสงค์ของการระงับที่ล่าช้า (Ctrl-Y) ใน Bash คืออะไร?
ส่วนเต็มของหน้า Bash man ซึ่งมีผลบังคับใช้จะบอกว่า: หากระบบปฏิบัติการที่ใช้ bash รองรับการควบคุมงาน bash จะมีระบบอำนวยความสะดวกในการใช้งาน การพิมพ์อักขระ suspend (โดยทั่วไปคือ ^ Z, Control-Z) ในขณะที่กระบวนการกำลังทำงานอยู่ทำให้กระบวนการนั้นหยุดลงและส่งกลับการควบคุมไปยัง bash การพิมพ์อักขระหยุดทำงานล่าช้า (โดยทั่วไปคือ ^ Y, Control-Y) ทำให้กระบวนการหยุดทำงานเมื่อพยายามอ่านอินพุตจากเทอร์มินัลและการควบคุมจะถูกส่งกลับไปยังทุบตี ผู้ใช้อาจจัดการกับสถานะของงานนี้โดยใช้bg คำสั่งเพื่อดำเนินการต่อในพื้นหลังfgคำสั่งเพื่อดำเนินการต่อในเบื้องหน้าหรือคำสั่ง kill เพื่อฆ่ามัน A ^ Z มีผลบังคับใช้ทันทีและมีผลข้างเคียงเพิ่มเติมที่ทำให้การส่งออกและประเภทหัวพิมพ์ที่รอดำเนินการถูกยกเลิก ฉันไม่เคยใช้Ctrl- Y; ฉันเพิ่งเรียนรู้เกี่ยวกับมัน ฉันทำได้ดีกับCtrl- Z(ระงับ) เท่านั้น ฉันพยายามจินตนาการว่าตัวเลือกนี้มีไว้เพื่ออะไร มันจะมีประโยชน์เมื่อไหร่? (โปรดทราบว่าคุณลักษณะนี้ไม่มีอยู่ในรุ่น Unix ทั้งหมดมีอยู่ในSolarisและFreeBSDแต่ไม่ใช่ใน Linux การตั้งค่าที่สอดคล้องกันคือstty dsusp) บางทีอาจจะน้อยจิตใจ: มีอะไรที่สามารถทำได้ด้วยCtrl- Yที่ไม่สามารถทำได้อย่างง่ายดายเพียงแค่มีCtrl- Z?

3
โปรแกรมรันจากเซสชัน ssh ขึ้นอยู่กับการเชื่อมต่อหรือไม่?
โปรแกรมที่รันจากเซสชัน ssh นั้นขึ้นอยู่กับการเชื่อมต่อกับลูกค้าหรือไม่? ตัวอย่างเช่นเมื่อการเชื่อมต่อช้าจริงๆ ดังนั้นมันจะรอจนกว่าสิ่งที่พิมพ์บนหน้าจอหรือไม่ และถ้ามันขึ้นอยู่กับการเชื่อมต่อมันจะเกิดขึ้นกับหน้าจอหรือbyobuเช่นกัน? เนื่องจากโปรแกรมเหล่านี้ยังคงทำงานอยู่แม้จะถูกตัดการเชื่อมต่อจากโฮสต์ หมายเหตุ: ฉันพบคำถามที่เกี่ยวข้องเหล่านี้เท่านั้น: การยกเลิกการเชื่อมต่อชั่วคราวของเซสชัน ssh ส่งผลกระทบต่อโปรแกรมที่ทำงานอยู่หรือไม่? เกิดอะไรขึ้นกับเซสชันของหน้าจอผ่าน ssh เมื่อการเชื่อมต่อขาดหายไป
29 ssh  tty  job-control 

1
ctrl c เทียบกับ ctrl z ด้วยเบื้องหน้างาน
Ctrl+ Zหยุดงานขณะที่Ctrl+ Cฆ่างาน ทำไมถึงเป็นอย่างนั้น? วิธีอื่นจะไม่เข้าท่ามากกว่านี้หรือ z@z-lap:~$ sleep 100& [1] 4458 z@z-lap:~$ sleep 200& [2] 4459 z@z-lap:~$ jobs [1]- Running sleep 100 & [2]+ Running sleep 200 & z@z-lap:~$ fg %1 sleep 100 ^Z [1]+ Stopped sleep 100 z@z-lap:~$ jobs [1]+ Stopped sleep 100 [2]- Running sleep 200 & z@z-lap:~$ fg …

4
เกิดอะไรขึ้นกับผลลัพธ์ของกระบวนการที่ถูกปฏิเสธและสูญเสียเทอร์มินัล
ถ้าฉันปิดเทอร์มินัลเสมือนซึ่งบางกระบวนการเริ่มทำงานเอาต์พุตจะตรงไป/dev/nullหรืออาจทำให้หน่วยความจำสกปรกได้หรือไม่ ฉันสามารถดึงเอาท์พุทออกมาอ่านต่อได้หลังจากนั้นได้ไหม? [แก้ไข]: ดังนั้นเป็นช่วงเวลาของการปฏิเสธกระบวนการอย่างมีประสิทธิภาพสิ้นอำนาจของฉันในการควบคุมการส่งออกของมันได้หรือไม่ ฉันยังสังเกตเห็นด้วยว่าถ้าฉันปฏิเสธกระบวนการที่หยุดตอนแรกทุกอย่างดูเหมือนปกติ: มันไม่ได้ถูกยกเลิกหรือแสดงในงาน แต่ถ้าฉันออกจากระบบ (และฉันไม่ได้หมายถึงปิดเทอร์มินัลเพียงออกจากsuตัวอย่าง) กระบวนการจะสิ้นสุดลง กระบวนการที่ถูกปฏิเสธการดำเนินการเบื้องหลังทั้งหมดยังคงทำงานต่อไป

5
ฉันจะฆ่าและรอให้กระบวนการส่วนหลังเสร็จสิ้นในเชลล์สคริปต์ได้อย่างไรเมื่อฉัน Ctrl + C
ฉันกำลังพยายามตั้งค่าเชลล์สคริปต์เพื่อให้ทำงานในกระบวนการแบ็คกราวน์และเมื่อฉันCtrlcเชลล์สคริปมันจะฆ่าเด็ก ๆ แล้วก็ออกไป สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ ดูเหมือนว่าkill 0 -INTสคริปต์ยังฆ่าสคริปต์ก่อนที่จะเกิดการรอดังนั้นเชลล์สคริปต์จะตายก่อนที่เด็ก ๆ จะเสร็จสมบูรณ์ ความคิดใด ๆ เกี่ยวกับวิธีการที่ฉันสามารถทำให้รอเชลล์สคริปต์สำหรับเด็กที่จะตายหลังจากที่ส่งINT? #!/bin/bash trap 'killall' INT killall() { echo "**** Shutting down... ****" kill 0 -INT wait # Why doesn't this wait?? echo DONE } process1 & process2 & process3 & cat # wait forever

2
+/- หลังจากงานในพื้นหลังเสร็จสิ้น
รันงานในพื้นหลัง $ command & เมื่อเสร็จสิ้นเครื่องจะพิมพ์ออกมา [n]+ command หรือ [n]- command ดังนั้นบางครั้งมันเป็นบวกและครั้งอื่น ๆ [n]มันเป็นดังต่อไปนี้ลบ บวก / ลบหมายความว่าอย่างไร

2
แนวคิดของเทอร์มินัลการควบคุมใน Unix
บางคนสามารถอธิบายด้วยวิธีที่ง่ายต่อการเข้าใจถึงแนวคิดของการควบคุมเทอร์มินัลในระบบยูนิกซ์และยูนิกซ์เช่นระบบหรือไม่? มันเกี่ยวข้องกับเซสชั่นหรือไม่? ถ้าใช่แล้วได้อย่างไร

2
ใครสามารถอธิบายรายละเอียดสิ่งที่ "set -m" ทำอะไรได้บ้าง
ในหน้า manมันแค่พูดว่า: เปิดใช้งานการควบคุมงาน แต่สิ่งนี้หมายความว่าอย่างไร ฉันเจอคำสั่งนี้ด้วยคำถาม SOฉันมีปัญหาเดียวกันกับ OP ซึ่งเป็น "fabric ไม่สามารถเริ่ม tomcat" ได้ และset -mแก้ไขสิ่งนี้ OP อธิบายเล็กน้อย แต่ฉันไม่เข้าใจ: ปัญหานี้อยู่ในงานพื้นหลังเนื่องจากจะถูกฆ่าเมื่อคำสั่งสิ้นสุดลง วิธีแก้ปัญหานั้นง่าย: เพียงเพิ่ม "set -m;" คำนำหน้าก่อนคำสั่ง

1
เริ่มกระบวนการพื้นหลังจากสคริปต์และจัดการเมื่อสคริปต์สิ้นสุด
ฉันต้องการเรียกใช้และกำหนดค่ากระบวนการคล้ายกับ daemon จากสคริปต์ shell ของฉันคือ zsh emulated ภายใต้ Cygwin และ daemon คือSFKซึ่งเป็นเซิร์ฟเวอร์ FTP พื้นฐาน สำหรับสิ่งที่สำคัญที่นี่สคริปต์startserv.shสามารถถูกร่างได้ดังนี้: #!/bin/sh read -s -p "Enter Password: " pw user=testuser share=/fshare cmd="sfk ftpserv -user=$user -pw=$pw -usedir $share=$share" $cmd & หลังจากเรียกใช้สคริปต์สคริปต์startserv.shจะหยุด (จบลง?) โดยไม่แสดงพรอมต์ใด ๆ จากนั้น: CTRL+ Cจบทั้งสคริปต์และกระบวนการทำงานเบื้องหลัง การกดปุ่มEnterสคริปต์จะสิ้นสุดกระบวนการจะยังคงอยู่ในพื้นหลัง อย่างไรก็ตามผมสามารถดูได้ผ่านทางpsและไม่ได้jobsดังนั้นเมื่อฉันต้องการที่จะปิดการที่ผมต้องส่งโหดร้ายkill -9สัญญาณซึ่งเป็นสิ่งที่ผมอยากจะหลีกเลี่ยงในความโปรดปรานของ +CTRLC ทางเลือกอื่น จะเรียกใช้สคริปต์ทั้งหมดในพื้นหลัง 'จะ' แต่คำสั่งไม่สามารถได้รับข้อมูลผู้ใช้ถ้าสคริปต์ทำงานเป็นreadstartserv.sh & โปรดทราบว่าฉันต้องการเซิร์ฟเวอร์ชั่วคราวไม่ใช่ภูตจริง: …

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