คำถามติดแท็ก controlling-terminal

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

4
โปรดอธิบายผลลัพธ์ของคำสั่ง ps -ef นี้หรือไม่
ส่วนหนึ่งของเอาท์พุทจากps -efคำสั่งที่ได้รับด้านล่าง: UID PID PPID C STIME TTY TIME CMD root 1 0 0 2012 ? 00:00:01 init [3] root 2 1 0 2012 ? 00:00:01 [migration/0] root 3 1 0 2012 ? 00:00:00 [ksoftirqd/0] root 4 1 0 2012 ? 00:00:00 [watchdog/0] root 5 1 0 2012 ? 00:00:00 …

2
วิธีรับชื่อจริงของเทอร์มินัลการควบคุม?
เราจะได้รับชื่อจริงของเทอร์มินัลการควบคุมได้อย่างไร (ถ้ามีอีกหนึ่งข้อผิดพลาด) เป็นชื่อพา ธ โดย "ชื่อจริง" ฉันหมายถึงไม่/dev/ttyซึ่งไม่สามารถใช้โดยกระบวนการอื่น ๆ เพื่ออ้างถึงเทอร์มินัลเดียวกัน ฉันชอบคำตอบเป็นรหัสเปลือกง่าย (เช่นตัวอย่างด้านล่าง) ถ้าเป็นไปได้มิฉะนั้นเป็นฟังก์ชั่น C โปรดทราบว่าสิ่งนี้จะต้องใช้งานได้แม้ว่าจะมีการเปลี่ยนเส้นทางอินพุตมาตรฐานเพื่อให้ttyไม่สามารถใช้ยูทิลิตี้: หนึ่งจะได้รับnot a ttyข้อผิดพลาดในกรณีเช่นนี้เนื่องจากttyเพียงพิมพ์ชื่อไฟล์ของเทอร์มินัลที่เชื่อมต่อกับอินพุตมาตรฐาน ภายใต้ Linux สามารถใช้: echo "/dev/`ps -p $$ -o tty | tail -n 1`" แต่นี้ไม่ได้พกพาเป็นไปตาม POSIX, รูปแบบของชื่อสถานีเป็นที่ไม่ได้ระบุ เกี่ยวกับฟังก์ชั่น C, ctermid (NULL)ส่งคืน/dev/ttyซึ่งไม่มีประโยชน์ที่นี่ หมายเหตุ:ตามzshเอกสารประกอบอย่างใดอย่างหนึ่งที่สามารถทำได้ zsh -c 'echo $TTY' แต่ตอนนี้ (เวอร์ชั่น 5.0.7) ล้มเหลวเมื่อทั้งอินพุตมาตรฐานและเอาต์พุตมาตรฐานถูกเปลี่ยนเส้นทาง: $ zsh -c 'echo …

3
เรียกใช้คำสั่ง / สคริปต์ที่ตัดการเชื่อมต่อจากเทอร์มินัลการควบคุมหรือไม่?
ฉันกำลังตรวจสอบพฤติกรรมของสคริปต์ที่ปกติแล้วจะทำงานเป็นกระบวนการอัตโนมัติ (เช่น cron, Jenkins) สคริปต์สามารถ (ในที่สุด) เรียกใช้คำสั่งที่ทำงานแตกต่างกัน (ค้นหาอินพุตผู้ใช้) เมื่อรันแบบโต้ตอบ; ตัวอย่างเช่นpatchจะถามว่าจะทำอย่างไรกับแพทช์ที่กลับด้านและsvnจะขอรหัสผ่าน แต่ฉันต้องดูว่าจะเกิดอะไรขึ้นเมื่อพวกเขาทำงานแบบไม่โต้ตอบ การโน้มน้าวใจpatchว่าการไม่โต้ตอบนั้นค่อนข้างง่าย ฉันแค่ต้องการเปลี่ยนเส้นทางstdoutให้เป็นคนที่ไม่ใช่ tty: $ </dev/null > >(cat) /path/to/myscript --args อย่างไรก็ตามsvnจะเชื่อมต่อกับเทอร์มินัลการควบคุมหากมีอยู่ การแก้ไขสคริปต์เพื่อส่งผ่าน--non-interactiveไม่ใช่ตัวเลือกจริงๆเนื่องจากนี่มาจากหลายระดับลึกและมันยากที่จะแน่ใจว่าฉันได้พบการเรียกใช้ทุกครั้ง มีวิธีการเรียกใช้สคริปต์ / คำสั่งแบบไม่โต้ตอบโดยไม่มีสถานีควบคุม (เพื่อที่/dev/ttyไม่มีอยู่)? ฉันต้องการ stdout / stderr ยังคงไปที่สถานีของฉัน (ฉันพบคำถามเรียกใช้สคริปต์ในเชลล์แบบไม่โต้ตอบแต่คำตอบสำหรับเรื่องความแตกต่างระหว่าง cron และสภาพแวดล้อมของผู้ใช้; ฉันได้กำจัดความแตกต่างทั้งหมดยกเว้นการไม่โต้ตอบ)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.