ฉันจะย้ายโปรเซสเป็นพื้นหลังและปิดเสียงเอาต์พุตได้อย่างไร


11

ว่าฉันเริ่มกระบวนการใน terminal และจะส่งออกไปยังข้อผิดพลาดมาตรฐานในขณะที่มันทำงาน ฉันต้องการย้ายกระบวนการไปยังพื้นหลังและปิดเสียงในเวลาเดียวกัน

มีวิธีทำโดยไม่หยุดกระบวนการและเริ่มใช้อีกครั้ง&และ> /dev/null 2>&1? ฉันสงสัยว่ามีคำสั่งบางอย่างที่ทำงานได้bg และสามารถเปลี่ยนตัวอธิบายผลลัพธ์ของกระบวนการเป้าหมายได้หรือไม่

คำตอบ:


9

สายเกินไป. หลังจากกระบวนการเริ่มทำงานเชลล์ไม่มีการควบคุมตัวอธิบายไฟล์กระบวนการอีกต่อไปดังนั้นคุณจึงไม่สามารถปิดเสียงได้โดยคำสั่งเชลล์

คุณสามารถพยายามที่จะฆ่าSIGHUPกับกระบวนการ ถ้ากระบวนการของคุณจัดการกับมันอย่างถูกต้องก็ควรแยกออกจากควบคุม TTY โชคไม่ดีที่ซอฟต์แวร์จำนวนมากไม่สามารถจัดการได้อย่างถูกต้องและอาจตายได้


คุณไม่สามารถทำ CTRL + Z เพื่อทำให้กระบวนการเป็นพื้นหลังได้หรือไม่ มันไม่ได้เงียบกระบวนการและถ้าคุณออกจากระบบฉันคิดว่ามันฆ่ากระบวนการเกินไป
Roy Rico

1
@RoyRico การฆ่า a SIGSTOPไปยังกระบวนการ (หรืออย่างที่คุณบอกว่าการทำ CTRL + Z ) ไม่ทำให้กระบวนการเงียบลง มันหยุดกระบวนการ!
andcoz

5

กระบวนการที่เรียกใช้จากเทอร์มินัลมี stdin, stdout และ stderr ที่ผูกไว้กับเทอร์มินัลและคุณไม่สามารถทำอะไรกับมันได้โดยไม่ต้องควบคุมเทอร์มินัลนั้นซ้ำ ... โดยปกติ แต่มีเครื่องมือที่ยุ่งยากบางอย่างที่ให้คุณทำ ดูตัวอย่างนี้ และโปรแกรมอื่น ๆ เช่นที่rettyกล่าวถึงนั่น


3

ฉันไม่เห็นด้วยกับ andcoz ว่ามันสายเกินไปที่จะเงียบเสียงเอาท์พุต

สมมติว่ากระบวนการทำงานในเบื้องหน้าใช้Ctrl-Zเพื่อหยุดกระบวนการชั่วคราว การทำเช่นนั้นจะรายงานหมายเลขงานและ ID กระบวนการ คุณสามารถไปข้างหน้าและย้ายกระบวนการไปที่พื้นหลังโดยใช้bg %1(สำหรับงาน # 1) แม้ว่าสิ่งนี้จะย้ายกระบวนการไปที่พื้นหลัง แต่ก็ไม่ได้ปิดเสียงเอาต์พุต เพื่อปิดเสียงเอาท์พุทที่คุณสามารถใช้เพื่อเปลี่ยนเส้นทางการส่งออกทั้งหมดไปยังgdb/dev/null

นี้ได้รับการอธิบายอย่างมากก่อนหน้านี้ที่/programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-lin/593764#593764


0

detachแต่เครื่องมือบรรทัดคำสั่งอื่น รุ่นล่าสุดรองรับการเขียน pidfiles โดยใช้ไฟล์สำหรับ stdin, stdout และ stderr และทำงานในเบื้องหน้า (เว็บไซต์ของdetachยังกล่าวถึงเครื่องมือที่คล้ายกัน)

http://inglorion.net/software/detach/

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