Ctrl-C ไม่ทำงานกับเซสชันที่ไม่ได้แยก pppd


12

ฉันมี ARM คณะ mini2440 และฉันได้ใส่ฐาน Debian ระบบ 6.0 multistrapที่มันใช้

ฉันเคยtmuxเรียกใช้หลายกระบวนการในหน้าต่างที่ต่างไปจาก/etc/rc.localนี้ ฉันเชื่อมต่อกับบอร์ดโดยใช้พอร์ตอนุกรมและรายการ inittab เพื่อเรียกใช้gettyบนพอร์ตนั้น ฉันใช้picocomเป็นตัวสื่อสารแบบอนุกรม

เมื่อรูทล็อกอิน~/.bashrcให้แนบเขาเข้ากับเซิร์ฟเวอร์ tmux ที่รันอยู่แล้วและสามารถติดตามกระบวนการได้อย่างง่ายดาย exec tmux attach-session -t "main"คำสั่งที่เกิดขึ้นจริง tmux รันด้วยการกำหนดค่าเริ่มต้น

ทุกอย่างทำงานได้ยกเว้นหนึ่งในกระบวนการ (เชลล์สคริปต์รอบ ๆpppd) ไม่ได้รับCtrlcจากเทอร์มินัลในขณะที่กระบวนการอื่นทำ ยังใช้Ctrl\งานได้ ยังใช้ kill -INT <pppd_pid>งานได้ แต่ใช้kill -INT <shellscript_pid>ไม่ได้

ฉันต้องCtrlcทำงานจริงๆ เกิดอะไรขึ้นกับการตั้งค่านี้

แก้ไข: นี่คือผลลัพธ์ของstty -aในเชลล์สคริปต์ก่อนหน้านี้pppd:

speed 38400 baud; rows 23; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

เนื่องจากเป็นเพียงpppdกระบวนการที่มีปัญหานี้ฉันคิดว่ามีบางอย่างเกี่ยวข้องกับมันหรือการกำหนดค่า แต่เมื่อฉันทำงานpppdนอก tmux นั้น Ctrl-C ทำงาน pppdทำงานด้วยnodetachตัวเลือกจึงอยู่ในส่วนหน้าของเทอร์มินัล

ฉันยังทดสอบบนเครื่อง dev ของฉัน (Debian 6.0 บน amd64) ด้วยผลลัพธ์เดียวกัน


6
ไม่stty -aแสดงintr = ^C? ถ้าไม่การintrตั้งค่าคืออะไร? (หมายเหตุ: stty -a | grep intrจะไม่ทำงานเนื่องจากจะทำให้sttyเขียนไปยังไพพ์แทนที่จะเป็น tty ของคุณ) Ctrl-V Ctrl-C echo ^Cหรือไม่? ถ้าไม่มันสะท้อนอะไร
Keith Thompson

@KeithThompson Ctrl-V พิมพ์^และ Ctrl-C เพิ่มCให้กับมัน
zaadeh

7
ดูเหมือนจะชัดเจนเกินไป แต่มีtrapคำสั่งในเชลล์สคริปต์หรือไม่
Keith Thompson

1
pppdไม่ได้พูดในสิ่งที่เปลือกต้นแบบตัดสินใจที่จะทำกับ SIGINT โดยตรง ลองเขียนเชลล์สคริปต์ตัวจิ๋วที่เรียกใช้ / bin / sleep 600 และส่งเชลล์ประมวลผล SIGINT คุณจะเห็นสิ่งเดียวกัน
Andrew B

2
ฉันไม่รู้จัก tmux ดีพอ แต่ฉันสงสัยว่า pppd ตรวจพบว่าไม่มีเทอร์มินัลแม้ว่าจะทำงานภายใต้ tmux แล้วก็ละเว้นสัญญาณ INT ร่องรอยของ pppd ในขณะที่มันเริ่มต้นเช่นเดียวกับเมื่อ tmux คือ "Detatched" ในครั้งแรกอาจจะบอก
Johan

คำตอบ:


2

คุณเคยคิดเกี่ยวกับหน้าจอ givin GNU ลอง? จะซื่อสัตย์มากฉันไม่ได้มีประสบการณ์มากกับ tmux แต่หน้าจอทำงานได้ดีเสมอ


หน้าจอเซ็กซี่และน่าอัศจรรย์ +1 สำหรับคุณ
รูต

0

ปรากฎว่ามันเป็นข้อผิดพลาดในรุ่นที่เฉพาะเจาะจงของpppdมันที่ถูกนำมาใช้ใน distro ฉันตรวจสอบและรุ่นก่อนหน้าและรุ่นที่ใหม่กว่าpppdไม่มีปัญหานี้ tmuxนอกจากนี้ยังมีปัญหาไม่ได้อยู่ที่เฉพาะเจาะจงกับซุ้มนี้และแพลตฟอร์มหรือ หากpppdมีการเรียกใช้ภายในสคริปต์เชลล์มันไม่ได้จัดการ Ctrl-C ในขณะที่เปลือกนอกก็ไม่มีปัญหา

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