คำถามติดแท็ก signals

สัญญาณคือข้อความที่สามารถส่งไปยังกระบวนการที่กำลังทำงานอยู่ สัญญาณสามารถเริ่มต้นได้โดยโปรแกรมผู้ใช้หรือผู้ดูแลระบบ

5
รับ ssh เพื่อส่งต่อสัญญาณ
ฉันต้องการที่จะสามารถส่งสัญญาณ (SIGINT เป็นสิ่งสำคัญที่สุด) ผ่าน ssh คำสั่งนี้: ssh server "sleep 1000;echo f" > foo จะเริ่ม sleep บนเซิร์ฟเวอร์และหลังจาก 1,000 วินาทีมันจะใส่ 'f \ n' ในไฟล์ foo บนเครื่องของฉัน ถ้าฉันกด CTRL-C (เช่นส่ง SIGINT ไปยัง ssh) มันจะฆ่า ssh แต่จะไม่ฆ่า sleep บนเซิร์ฟเวอร์ระยะไกล ฉันต้องการที่จะฆ่า sleep บนเซิร์ฟเวอร์ระยะไกล ดังนั้นฉันจึงพยายาม: ssh server -t "sleep 1000;echo f" > foo แต่ถ้า stdin ไม่ใช่เทอร์มินัลฉันได้รับข้อผิดพลาดนี้: …
22 ssh  remote  tty  signals 

5
จะฆ่า soft gui applications ผ่านเทอร์มินัลได้อย่างไร
มีวิธีปิดแอปพลิเคชัน GUI อย่างเป็นมิตร " โปรดออกจากตัวคุณเองตอนนี้ " วิธีโดยไม่ต้องเข้าถึงกราฟิกไปยังหน้าต่างแอปพลิเคชันหรือไม่? ตัวอย่างเช่นหากจอแสดงผล Gnome / X ขัดข้องเป็นสีดำฉันต้องการเปลี่ยนไปใช้แอปพลิเคชัน tty2 และปิดเช่น firefox ด้วยวิธีที่ช่วยให้พวกเขาบันทึกการกำหนดค่าของพวกเขา ฯลฯ ที่ดีที่สุดโดยไม่ต้องสอบถามผู้ใช้เพิ่มเติม

2
จุดประสงค์ของการสั่งทุบตี `` suspend 'builtin คืออะไร?
ฉันพิมพ์help suspendและได้รับคำอธิบายสั้น ๆ นี้: suspend: suspend [-f] Suspend shell execution. Suspend the execution of this shell until it receives a SIGCONT signal. Unless forced, login shells cannot be suspended. Options: -f force the suspend, even if the shell is a login shell Exit Status: Returns success unless job control is …

1
การจัดการ Ctrl-C ในเซสชัน SSH
เมื่อฉันเริ่มเซสชัน SSH ที่ดำเนินการคำสั่งที่ใช้เวลานานจะเกิดอะไรขึ้นกับการจัดการCtrl+ C(SIGINT) ฉันเห็นว่าเซสชัน SSH ถูกปิด แต่ฉันไม่แน่ใจว่าใครจะได้รับ SIGINT ก่อน: ใช่หรือไม่ คำสั่งที่ทำงานระยะไกลระยะไกล? นั่นคือ (a) ตัวจัดการสัญญาณในคำสั่งรีโมตถูกเรียกและหยุดคำสั่งรีโมต (b) เชลล์ที่วางไข่ตรวจพบว่าคำสั่งหยุดทำงานและหยุดเช่นกัน (c) sshd รีโมตตรวจจับเชลล์หยุด ดังนั้นจึงปิดการเชื่อมต่อ หรือ ssh ท้องถิ่นได้รับสัญญาณและปิดการเชื่อมต่อ ฉันคิดว่า (1) กำลังเกิดขึ้น แต่ต้องการตรวจสอบให้แน่ใจ ฉันยังไม่แน่ใจเกี่ยวกับสิ่งที่เกิดขึ้นกับการจัดการเชลล์ของ SIGINT ในกรณีนี้ ตัวอย่างเช่นถ้าฉัน ... ssh remote 'while true ; do sleep 1 ; date ; done' และCtrl+ Cจากนั้นการเชื่อมต่อระยะไกลจะลดลง มีวิธีเรียกใช้คำสั่งระยะไกลภายใต้เปลือกที่จะมีชีวิตอยู่หลังจากCtrl+ C? นั่นคือในกรณีนี้หยุดลูปและอนุญาตให้ฉันทำงานบนเปลือกระยะไกลหรือไม่
20 ssh  signals 

1
ทำไม SIGUSR1 ทำให้กระบวนการถูกยกเลิก?
ฉันรู้สึกประหลาดใจกับความคิดเห็นนี้ในคำถามอื่น: การส่งสัญญาณ USR1 ในไม่ช้าหลังจากเริ่มต้น (เช่นในสคริปต์ทุบตีบรรทัดหลังจากที่คุณเริ่มต้น) จะเป็นการยกเลิกสัญญาณ ใครสามารถอธิบายได้ว่าทำไม ?
20 signals 

6
ประมวลผลลูกหลาน
ฉันกำลังพยายามสร้างที่เก็บกระบวนการ คอนเทนเนอร์จะเรียกโปรแกรมอื่น ๆ ตัวอย่างเช่น - สคริปต์ทุบตีที่เปิดใช้งานพื้นหลังที่มีการใช้ '&' คุณสมบัติที่สำคัญที่ฉันตามมาคือเมื่อฉันฆ่าตู้คอนเทนเนอร์ทุกอย่างที่ได้รับมาจากกระบอกไม้ไผ่ควรจะถูกฆ่า ไม่เพียง แต่กำกับดูแลลูกหลาน แต่รวมถึงลูกหลานด้วย เมื่อฉันเริ่มโครงการนี้ฉันเชื่ออย่างผิด ๆ ว่าเมื่อคุณฆ่ากระบวนการเด็ก ๆ ก็ถูกฆ่าโดยอัตโนมัติเช่นกัน ฉันขอคำแนะนำจากผู้ที่มีความคิดที่ไม่ถูกต้องเหมือนกัน ในขณะที่เป็นไปได้ที่จะจับสัญญาณและส่งต่อการฆ่าให้กับเด็กนั่นไม่ใช่สิ่งที่ฉันกำลังมองหาที่นี่ ฉันเชื่อว่าสิ่งที่ฉันต้องการจะประสบความสำเร็จเพราะเมื่อคุณปิด xterm สิ่งใดก็ตามที่ทำงานอยู่ภายในมันจะถูกฆ่าเว้นแต่ว่ามันจะไม่เป็นเช่นนั้น ซึ่งรวมถึงกระบวนการที่ถูกโยงถึง นั่นคือสิ่งที่ฉันต้องการสร้างใหม่ ฉันมีความคิดว่าสิ่งที่ฉันกำลังพูดถึงเกี่ยวข้องกับเซสชันของยูนิกซ์ หากมีวิธีที่เชื่อถือได้ในการระบุการสืบทอดทั้งหมดของกระบวนการมันจะมีประโยชน์ที่จะสามารถส่งสัญญาณตามอำเภอใจได้เช่นกัน เช่น SIGUSR1

1
เกิดอะไรขึ้นกับกระบวนการ Linux แบบมัลติเธรดหากได้รับสัญญาณ
หากกระบวนการ Unix (Posix) ได้รับสัญญาณตัวจัดการสัญญาณจะทำงาน จะเกิดอะไรขึ้นกับมันในกระบวนการแบบมัลติเธรด? เธรดใดรับสัญญาณ ในความคิดของฉันสัญญาณ API ควรขยายเพื่อจัดการ (เช่นเธรดของตัวจัดการสัญญาณควรจะสามารถกำหนดได้) แต่การค้นหา infos บนเน็ตฉันพบเปลวไฟนานแค่ปีเดียวในรายชื่อส่งเมลเคอร์เนลของ linux และบน ฟอรั่มที่แตกต่างกัน ตามที่ฉันเข้าใจแล้วแนวคิดของ Linus นั้นแตกต่างจากมาตรฐาน Posix และชั้นแรกที่รองรับเลเยอร์บางส่วนถูกสร้างขึ้น แต่ตอนนี้ Linux ตามรูปแบบ posix สถานะปัจจุบันคืออะไร


2
ฆ่ากระบวนการที่ถูกระงับหรือไม่
ฉันสับสนเล็กน้อยโดย: % vim tmp zsh: suspended vim tmp % kill %1 % jobs [1] + suspended vim tmp % kill -SIGINT %1 % jobs [1] + suspended vim tmp % kill -INT %1 % jobs [1] + suspended vim tmp ดังนั้นฉันจึงลาออกเพื่อ "ทำเอง" และสงสัยว่าทำไมในภายหลัง: % fg [1] - continued vim tmp …

1
ใครเป็นผู้ตัดสินใจว่าแอปพลิเคชันใดที่รับสัญญาณจากแป้นพิมพ์
ความเข้าใจในปัจจุบันของฉันเกี่ยวกับสัญญาณจากแป้นพิมพ์ในเทอร์มินัลคือ (โดยส่วนใหญ่จะพยายามทำแผนที่การสังเกตของฉันกับสิ่งที่สามารถพบได้บน google) ต่อไปนี้: ผู้ใช้กด Cc สิ่งนี้ถูกส่งไปยังอินพุตบัฟเฟอร์ของเทอร์มินัลเป็นไบต์ซึ่งคำนวณโดยการล้าง 2 บิตซ้ายสุดจากค่า 7 บิต ascii ของ c หลังจากนี้จะเริ่มมีหมอกมากเพราะการกำหนดค่าสิ่งที่อินพุตหมายถึงสัญญาณที่จะทำใน terminal (stty) ฉันคิดว่ามันหมายความว่าอาคารผู้โดยสารกำลังส่งสัญญาณไปยังกระบวนการ แต่ฉันเองก็รู้ว่าเทอร์มินัลนั้นไม่ทราบเกี่ยวกับแอปพลิเคชันที่กำลังอ่านอยู่ การส่งสัญญาณโดยคีย์บอร์ดในเทอร์มินัลทำงานอย่างไรตั้งแต่ต้นจนจบ
16 terminal  signals 

3
ทำไม fork () ได้รับการออกแบบมาเพื่อคืน file descriptor?
เมื่อเขาหน้าเว็บเกี่ยวกับเคล็ดลับท่อตนเองแดน Bernstein อธิบายสภาพการแข่งขันด้วยselect()และสัญญาณข้อเสนอการแก้ปัญหาและสรุปว่า แน่นอนว่าสิ่งที่ถูกต้องคือการfork()ส่งคืนไฟล์อธิบายไม่ใช่รหัสกระบวนการ เขาหมายความว่าอย่างไร - เป็นเรื่องเกี่ยวกับความสามารถselect()ในกระบวนการลูกเพื่อจัดการการเปลี่ยนแปลงสถานะของพวกเขาแทนที่จะต้องใช้เครื่องจัดการสัญญาณเพื่อรับการแจ้งเตือนการเปลี่ยนแปลงสถานะเหล่านั้นหรือไม่

1
รอ bash-builtin เบิร์น CPU ที่ 100 เปอร์เซ็นต์
เกิดขึ้นอย่างน้อยในGNU bash รุ่น 4.3.42 x86_64 && GNU bash รุ่น 4.3.11 x86_64 ฉันใช้sleep & wait $!แทนวิธีง่าย ๆsleepในการทำให้sleepสัญญาณขัดจังหวะ(เหมือนSIGUSR1 ) แต่ดูเหมือนว่าwaitbash-builtin จะทำงานในลักษณะที่แปลกเมื่อคุณเรียกใช้สิ่งต่อไปนี้ อาคาร 1: cat <( trap 'echo SIGUSR1' SIGUSR1; echo $BASHPID; while :;do sleep 1 & wait $!; echo test; done )& อาคาร 2: kill -10 /the pid of the subshell, printed …

1
เริ่มกระบวนการพื้นหลังจากสคริปต์และจัดการเมื่อสคริปต์สิ้นสุด
ฉันต้องการเรียกใช้และกำหนดค่ากระบวนการคล้ายกับ daemon จากสคริปต์ shell ของฉันคือ zsh emulated ภายใต้ Cygwin และ daemon คือSFKซึ่งเป็นเซิร์ฟเวอร์ FTP พื้นฐาน สำหรับสิ่งที่สำคัญที่นี่สคริปต์startserv.shสามารถถูกร่างได้ดังนี้: #!/bin/sh read -s -p "Enter Password: " pw user=testuser share=/fshare cmd="sfk ftpserv -user=$user -pw=$pw -usedir $share=$share" $cmd & หลังจากเรียกใช้สคริปต์สคริปต์startserv.shจะหยุด (จบลง?) โดยไม่แสดงพรอมต์ใด ๆ จากนั้น: CTRL+ Cจบทั้งสคริปต์และกระบวนการทำงานเบื้องหลัง การกดปุ่มEnterสคริปต์จะสิ้นสุดกระบวนการจะยังคงอยู่ในพื้นหลัง อย่างไรก็ตามผมสามารถดูได้ผ่านทางpsและไม่ได้jobsดังนั้นเมื่อฉันต้องการที่จะปิดการที่ผมต้องส่งโหดร้ายkill -9สัญญาณซึ่งเป็นสิ่งที่ผมอยากจะหลีกเลี่ยงในความโปรดปรานของ +CTRLC ทางเลือกอื่น จะเรียกใช้สคริปต์ทั้งหมดในพื้นหลัง 'จะ' แต่คำสั่งไม่สามารถได้รับข้อมูลผู้ใช้ถ้าสคริปต์ทำงานเป็นreadstartserv.sh & โปรดทราบว่าฉันต้องการเซิร์ฟเวอร์ชั่วคราวไม่ใช่ภูตจริง: …

1
อัพเดตประวัติทุบตีในเทอร์มินัลอื่นเมื่อออกจากเทอร์มินัลหนึ่ง
ฉันรู้ว่าคำถามนี้ไม่ปิดบังเนื่องจากมีการถามที่นี่ให้อัปเดต (และทำซ้ำที่นี่) สิ่งที่ฉันพยายามทำให้สำเร็จนั้นต่างออกไปเล็กน้อย ฉันไม่ชอบความคิดที่จะให้ฉันเขียนไฟล์ใหม่ทุกครั้งที่lsฉันพิมพ์ ( history -a; history -c; history -r) ฉันต้องการอัปเดตไฟล์เมื่อออก ง่ายมาก (จริง ๆ แล้วเป็นค่าเริ่มต้น) แต่คุณต้องต่อท้ายแทนที่จะเขียนใหม่: shopt -s histappend ตอนนี้เมื่อปิดเทอร์มินัลฉันต้องการทำให้คนอื่น ๆ ทั้งหมดที่ยังคงเปิดอยู่เพื่อรับทราบการอัพเดต ฉันชอบทำสิ่งนี้โดยไม่ตรวจสอบผ่าน$PS1ทุกอย่างcommandที่ฉันพิมพ์ ฉันคิดว่ามันจะดีกว่าถ้าจะจับสัญญาณบางอย่าง คุณจะทำอย่างไร ถ้าไม่ได้เป็นไปได้อาจจะเป็นที่เรียบง่ายcronjob? เราจะไขปริศนานี้ได้อย่างไร?

4
Ctrl-C พร้อมกับสองคำสั่งพร้อมกันในทุบตี
ฉันต้องการเรียกใช้สองคำสั่งพร้อมกันในทุบตีบนเครื่อง Linux ดังนั้นใน./execute.shทุบตีสคริปต์ของฉันฉันใส่: command 1 & command 2 echo "done" อย่างไรก็ตามเมื่อฉันต้องการหยุดสคริปต์ทุบตีและกดCtrl+ Cเฉพาะคำสั่งที่สองเท่านั้นที่หยุด คำสั่งแรกยังคงทำงานอยู่ ฉันจะแน่ใจได้อย่างไรว่าสคริปต์ทุบตีสมบูรณ์หยุดทำงาน หรือไม่ว่าในกรณีใดฉันจะหยุดคำสั่งทั้งสองได้อย่างไร เพราะในกรณีนี้ไม่ว่าฉันจะกดCtrl+ Cคำสั่งที่ทำงานต่อไปบ่อยแค่ไหนและฉันก็ถูกบังคับให้ปิดเทอร์มินัล

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