สมมติว่าคุณเริ่มงานเช่นนี้
foo
และจากนั้นความปรารถนาที่คุณต้องการวางไว้ในพื้นหลัง พิมพ์ดีดCtrl+ Zแล้วbgไม่หลอกลวง แต่จะหยุดfooระหว่างCtrl+ และZ bgฉันจะวาง foo ไว้ในพื้นหลังโดยไม่หยุดก่อนได้อย่างไร
สมมติว่าคุณเริ่มงานเช่นนี้
foo
และจากนั้นความปรารถนาที่คุณต้องการวางไว้ในพื้นหลัง พิมพ์ดีดCtrl+ Zแล้วbgไม่หลอกลวง แต่จะหยุดfooระหว่างCtrl+ และZ bgฉันจะวาง foo ไว้ในพื้นหลังโดยไม่หยุดก่อนได้อย่างไร
คำตอบ:
ในทางเทคนิคfooแล้วทำงานในพื้นหลัง คุณสามารถเริ่มเซสชันเทอร์มินัลที่สองและเซสชันแรกจะยังคงทำงานต่อไปfooในขณะที่คุณทำสิ่งอื่น ๆ
ใน X สิ่งนี้เกี่ยวข้องกับการเริ่มต้นแอปพลิเคชั่นเทอร์มินัลที่สองหรือเปิดแท็บอื่นหากเทอร์มินัลอีมูเลเตอร์ของคุณมีคุณสมบัติดังกล่าว
บนคอนโซลหากคุณไม่ได้วางแผนไว้คุณจะต้องเปลี่ยนไปใช้เทอร์มินัลเสมือนอื่นแล้วลงชื่อเข้าใช้อีกครั้ง
หากคุณใช้เทอร์มินัลมัลติเพล็กเซอร์เช่นscreenหรือtmuxคุณสามารถเริ่มเซสชันอื่นภายในเซสชันได้ ตัวอย่างเช่นในหน้าจอสิ่งนี้ทำได้โดยใช้Ctrl+ Aตามด้วยCtrl+ Cทันที หากต้องการสลับระหว่างพวกเขาให้ใช้ Ca Cn และ Ca Cp เพื่อย้อนกลับไปมาระหว่างเทอร์มินัลเซสชัน
foo ตัวเอง (ขาดการตรวจสอบเฉพาะที่ฉันคาดเดาในป่าอยู่ที่ไหนสักแห่งระหว่างหายากและไม่มีอยู่) ไม่สนใจว่าจะทำงานในหน้าต่างด้านบนสุดหรือแม้ว่าจะมีบางสิ่งที่แสดงผลของมัน
fooทำงานในพื้นหลัง" ... เพียงแค่ ... ไม่ทางเทคนิค
fooดังนั้นตอนนี้ฉันจะทำอย่างไร?" หากคุณรู้สึกว่าคำตอบนี้ (หรือคำตอบอื่น ๆ ) นั้นไม่มีประโยชน์ในการตอบคำถามฉันขอแนะนำให้คุณใช้สิทธิ์ในการลงคะแนนของคุณรวมถึงออกจากคำตอบของคุณเองเพื่อตอบคำถามจากสิ่งที่คุณรู้สึกว่าเป็นมุมที่ถูกต้องมากกว่า การโต้แย้งเกี่ยวกับหนึ่งในคำตอบที่เหลืออยู่ในคำถาม บางทีคุณอาจจะรู้สึกว่าสำหรับคำตอบเช่น l0b0 จะดี แต่คำตอบข้อเสนอของฉันมีวิธีที่จะทำอย่างน้อยประมาณสิ่งที่ OP ต้องการ
การเพิ่ม&เครื่องหมายหลังจากคำสั่ง ( foo &) จะทำให้พื้นหลังนั้นทันที แต่ฉันเชื่อว่าไม่มีวิธีใดในการกำหนดค่าเทอร์มินัล / เชลล์เพื่อให้พื้นหลังบางอย่างทันทีที่พื้นหน้า
การส่งแอปพลิเคชันจากเบื้องหน้าไปยังพื้นหลังต้องได้รับความร่วมมือจากทั้งเทอร์มินัลและเชลล์ เทอร์มินัลไม่สามารถทำได้โดยลำพังเนื่องจากเชลล์ต้องตั้งค่ากลุ่มกระบวนการพื้นหน้า เชลล์ไม่สามารถทำด้วยตัวเองได้เพราะเทอร์มินัลต้องดำเนินการกดปุ่ม (เชลล์ไม่ได้อยู่ในเบื้องหน้าดังนั้นจึงไม่สามารถรับการกดปุ่มได้)
ฉันมีการกำหนดค่า zshที่ฉันสามารถกดCtrl+ Zสองครั้งติดต่อกันอย่างรวดเร็ว; การกดครั้งแรกจะหยุดกระบวนการชั่วคราวและการกดครั้งที่สองจะดำเนินการต่อในพื้นหลัง ฉันไม่รู้วิธีพอร์ตเพื่อทุบตี
หากคุณกำลังทำงานในเทอร์มินัลอีมูเลเตอร์ที่ช่วยให้คุณสามารถฉีดการกดแป้นได้คุณสามารถฉีด^Zbg^M(ใช้^เครื่องหมายสำหรับอักขระควบคุม) ตัวอย่างเช่นด้วยเทอร์มินัลอีมูเลเตอร์ X11 ให้รันxdotool --window 1234 Ctrl_L+Z b g Returnโดยที่ 1234 คือ ID หน้าต่างของเทอร์มินัลอีมูเลเตอร์ ด้วย Screen ให้รันscreen -S foo -p 12 -X stuff $'\032bg\r'โดยที่fooชื่อของเซสชันหน้าจอและ12เป็น ID หน้าต่าง
หากการพิมพ์ของคุณไม่เร็วพอสำหรับเคสให้เรียกใช้kill -s SIGSTOP 1023 && kill -s SIGCONT 1023จากเชลล์อื่นให้สมมติว่า 1023 เป็น PID เป้าหมาย
การปฏิเสธความรับผิด: ตามที่Ruslanอาจรู้ว่าลำดับที่เริ่มต้นใหม่ของงานจริงอย่างรวดเร็วbashจึงไม่สังเกตเห็นมัน