วิธีการตั้งค่าคำสั่งในพื้นหลังปิดเทอร์มินัลแล้วนำมันกลับมาที่ fg


10

ฉันกำลังพยายามหาวิธีเรียกใช้คำสั่งในพื้นหลังแล้วนำมาไว้ด้านหน้าเบื้องหน้าในภายหลัง ฉันเบื่อกับบทเรียนและคำตอบที่ผู้คนบอกว่ามันง่ายเพียงแค่ผนวก&ท้ายคำสั่งเพื่อให้มันทำงานในพื้นหลัง มันทำงานได้ภายในหน้าต่างเทอร์มินัลเดียวเท่านั้น ฉันต้องการใส่คำสั่งลงในพื้นหลังในเทอร์มินัลเดียวแล้วนำมันกลับมาที่พื้นหน้าหลังจากเปิดเทอร์มินัลอีกครั้ง

ตัวอย่าง:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

แน่นอนหลังจากปิดเทอร์มินัลไม่พบงานใดงานหนึ่ง

ตัวอย่างถัดไป:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

ฉันทำอะไรผิด? ใครช่วยอธิบายฉันถึงวิธีการเรียกใช้คำสั่งในพื้นหลังและนำมันกลับมาที่เบื้องหน้า

คำตอบ:


11

เป็นไปไม่ได้ในแบบที่คุณต้องการ

ลองทบทวนแนวคิดพื้นฐานบางอย่าง:

  • กลุ่มกระบวนการคือชุดของกระบวนการที่เกี่ยวข้องซึ่งสามารถส่งสัญญาณได้ในครั้งเดียว
  • เซสชั่นคือชุดของกลุ่มกระบวนการซึ่งจะแนบมากับอุปกรณ์เทอร์มินัลเดียว (เรียกว่าสถานีควบคุม) หรือไม่ได้เชื่อมต่อกับเทอร์มินัลใด ๆ

หากคุณปิดเทอร์มินัลกระบวนการทั้งหมดในเซสชันนั้นจะตายยกเว้นว่า (daemons) จะถูกเรียกคืนไปยังกระบวนการ init และไม่มีทางที่จะให้พวกเขาควบคุมสถานีอีกครั้ง

ในคำหนึ่งกระบวนการ reparenting ถูก จำกัด อย่างมากในระบบ POSIX (daemonizing เป็นข้อยกเว้น) และความต้องการของคุณไม่สามารถทำได้


6
ในทางเทคนิคนี่เป็นคำตอบที่ถูกต้อง แต่ฉันเชื่อว่าผู้เยี่ยมชมที่มีปัญหานี้จะได้พบกับ "การแก้ปัญหา" ในคำตอบอื่น ๆ ที่กล่าวถึงหน้าจอ / byobu / tmux
Programster

คุณถูกต้อง .. แต่จากมุมมองของฉันแนวคิดพื้นฐานสำคัญกว่าที่จะเข้าใจระบบการทำงานได้ดีขึ้นและเข้าใจสิ่งที่คุณต้องการและทำผิด ขอบคุณทั้งคู่!
Timur Fayzrakhmanov

16
  1. ติดตั้งscreen:

    sudo apt-get install screen
  2. เริ่มscreen:

    screen -S session_name
  3. ดำเนินการคำสั่งของคุณในสิ่งที่คุณต้องการ

  4. แยกscreenออกจากเทอร์มินัล (คำสั่งของคุณจะยังคงทำงานอยู่):

    กดCTRL+ a+d

  5. ปิดเครื่อง

  6. เปิดเทอร์มินัลอื่นและแนบscreenเซสชันล่าสุดอีกครั้ง:

    screen -r

สำหรับข้อมูลเพิ่มเติมและเสริมตัวเลือกสำหรับการมองในscreenman screen


2
หน้าจอหรือ byobu (โดยเฉพาะถ้าคุณใช้ Ubuntu) Byobu ขึ้นอยู่กับหน้าจอถ้าฉันถูกต้อง แต่ฉันพบว่ามันมีฟังก์ชั่นพิเศษที่ฉันพบว่ามีประโยชน์และใช้งานง่ายกว่า แต่นั่นเป็นเรื่องของความเห็น
Programster

ขอบคุณคำแนะนำที่ดี! อาจจะต้องใช้คุณสมบัติ!) จากรัสเซียด้วยความรัก <3
Timur Fayzrakhmanov

@Programster ใช่ Byobu เป็นตัวอย่าง จอภาพ มันมีทั้ง byobu-screen และ byobu-tmux
user.dz

1
ผมขอแนะนำให้เป็นทางเลือกtmux screen
gerrit

5

คุณได้ลองแล้ว: byobuหรือtmuxขั้วใดเป็นมัลติเพล็กเซอร์ ไม่ว่าสิ่งที่คุณกำลังมองหา แต่มันมีพฤติกรรมที่คล้ายกัน

byobu-screen

จากนั้นรันคำสั่งของคุณเพื่อแยก:

byobu-screen -d

ในการดำเนินการต่อ:

byobu-screen -r

ดูhttps://help.ubuntu.com/community/Screen


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