STDOUT ของโปรแกรมที่ถูกปฏิเสธถูกนำไปที่ใด


11

จากการติดตามคำถามนี้ฉันต้องการทราบว่า STDOUT และ STDERR ของโปรแกรมที่ฉันเรียกใช้disown -hนั้นถูกเปลี่ยนเส้นทางไปที่ใด

คำตอบ:


10

disownไม่เปลี่ยนโปรแกรม STDOUT / ERR พวกเขาจะยังคงไปที่ใดก็ตามที่คุณเปลี่ยนเส้นทาง (โดยใช้>ฯลฯ ) หากคุณไม่ได้เปลี่ยนเส้นทางพวกเขาจะเข้าสู่เทอร์มินัลที่คุณเริ่มโปรแกรมจาก (จนกว่าคุณจะปิดเทอร์มินัลนั้นซึ่งในกรณีนี้จะถูกยกเลิก)

หากต้องการแสดงตัวอย่างให้รันสิ่งนี้ในเทอร์มินัล:

bash -c 'while true; do sleep 1; echo hi; done' &

สิ่งนี้จะพิมพ์ "สวัสดี" ทุกวินาที (และรบกวนคุณชะมัด ;-)) หากคุณdisownโปรแกรมหลังจากเริ่มต้น "hi" จะดำเนินการต่อไป คุณจำเป็นต้องค้นหา PID ของเชลล์ (ใช้เช่น ps) และฆ่ามันเพื่อให้มันหยุด

แก้ไข:

ขึ้นอยู่กับความคิดเห็นที่อาจจะสิ่งที่คุณต้องการจะทำคือการกู้คืนการส่งออกของโปรแกรมหลังจากที่คุณdisownเอ็ดมันและปิดสถานีมันก็ทำงานในนี้จะอธิบายในคำถามนี้:. หลังจากที่ความเป็นจริงระยะไกล nohup กับ tcsh ( ขอบคุณนักต้มตุ๋น quixote)


ตามคำถามก่อนหน้าของเขาความจริงก็คือว่าเขาปิดสถานีก่อนหน้านี้ เขาจะเอาท์พุทได้อย่างไร
Gnoupi

@Gnoupi: ฉันไม่คิดว่าจะมีวิธีที่จะได้รับผลตอบแทนกลับมา อย่างน้อยฉันก็ไม่เคยได้ยินเลย
sleske

ขอบคุณสำหรับความคิดเห็น Gnoupi :-) ในความเป็นจริงการส่งออกเป็นที่ที่จะพบ ฉันจะดูต่อไปว่า :-)
Thrawn

1
นี่คือคำตอบจริงๆ: ปฏิเสธไม่เปลี่ยนแปลงอะไรเลย; คุณจำเป็นต้องตั้งค่าการจับหรือการเปลี่ยนเส้นทางใด ๆเมื่อคุณเริ่มต้นกระบวนการ หากคุณต้องการมันในภายหลังgdbเป็นเพื่อนของคุณ (เท่านั้น): superuser.com/questions/50058/…
quack quixote

@quack - ฉันจะบอกว่าคำถามที่ต้องการ refactoring แล้วให้ความสำคัญกับกรณีการใช้งานจริงมากกว่าเครื่องมือเท่านั้น ในรูปแบบปัจจุบัน (เน้นที่การปฏิเสธ) นี่เป็นคำตอบที่ถูกต้องแน่นอน แต่จากบริบทด้วยคำถามก่อนหน้านี้ผู้ใช้ต้องการกู้คืนเอาต์พุตและในกรณีนี้ลิงก์ของคุณคือคำตอบ
Gnoupi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.