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

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

2
สัญญาณ EXIT, DEBUG, RETURN และ ERR หรือไม่
trapbuiltin ในทุบตีมีไวยากรณ์ต่อไป trap [-lp] [arg] [sigspec ...] ... แต่ละsigspecชื่ออาจเป็นชื่อสัญญาณหรือหมายเลขสัญญาณ ชื่อสัญญาณไม่คำนึงถึงขนาดตัวพิมพ์และส่วนนำหน้า SIG เป็นทางเลือก ... จุดคู่มือทุบตีให้เห็นว่าsigspecสามารถEXIT, DEBUG, และRETURN ERRพวกเขาชื่อสัญญาณหรือไม่ ทำไมฉันไม่พบพวกเขาในรายการชื่อสัญญาณทั้งหมดที่ระบุด้านล่างแม้จะเพิ่มคำนำหน้าSIGให้ พวกมันเกี่ยวข้องกับ bash shells เท่านั้น แต่ไม่ใช่กับ Linux OS? พวกเขาทุบเปลือกสัญญาณ แต่ไม่ใช่สัญญาณ Linux OS หรือไม่? $ trap -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) …
14 bash  signals 

1
มีวิธีใดที่จะบอกได้ว่าเชลล์สคริปต์ถูกฆ่าด้วยสัญญาณ 9
ฉันมีสคริปต์ทุบตี (เรียกจากโปรแกรมจาวา) ที่ยังคงถูกฆ่า ฉันมักจะจับsignal 15ด้วยtrapแต่แล้วบางส่วนสัญญาณอื่น ๆ ที่มาพร้อมที่ฉันสงสัยว่าเป็นแต่ฉันในพื้นตาบอดเป็นไปได้ถ้ามันเป็นจริงsignal 9signal 9 ฉันรู้ว่าคุณไม่สามารถtrap signal 9มีวิธีอื่นที่ฉันสามารถบอกได้ว่าsignal 9กำลังฆ่าเชลล์สคริปต์ของฉันหรือไม่

4
ความแตกต่างระหว่าง Ctrl-Z และ kill -STOP คืออะไร
เมื่อฉันเรียกใช้คำสั่ง ( makeในโครงการขนาดใหญ่) จากเชลล์ฉันสามารถพิมพ์ Ctrl-Z เพื่อหยุดกระบวนการและกลับไปที่เชลล์ ต่อจากนั้นฉันสามารถเรียกใช้fgเพื่อดำเนินการตามกระบวนการต่อไป ฉันกำลังพยายามเขียนเชลล์สคริปต์เพื่อทำสิ่งนี้โดยอัตโนมัติ (โดยเฉพาะเพื่อตรวจสอบอุณหภูมิ CPU ของฉันทุกสองสามวินาทีและหยุดกระบวนการถ้ามันร้อนเกินไปเนื่องจากคอมพิวเตอร์ของฉันมีแนวโน้มที่จะร้อนเกินไป) ความพยายามครั้งแรกของฉันทำงานเช่นนี้ (ลดความซับซ้อน): make & subpid="$!" sleep 2 # If the CPU temperature is too high... kill -STOP "$subpid" sleep 2 # If the CPU temperature has dropped to safe levels... kill -CONT "$subpid" wait "$subpid" น่าเสียดายที่นี่ใช้งานไม่ได้ การส่ง SIGSTOP ไปยังกระบวนการไม่ได้หยุดชั่วคราว …

6
Telnet ส่ง Ctrl-C
ฉันใช้ telnet เพื่อเชื่อมต่อกับเซิร์ฟเวอร์เทอร์มินัลซึ่งพร็อกซีการรับส่งข้อมูลไปยังพอร์ต RS-232 น่าเสียดายที่เมื่อใช้อุปกรณ์บางอย่างมันเป็นไปไม่ได้ที่จะส่งตัวอักษรCTRL+ C(0x03) แทนที่จะส่งตัวละครดูเหมือนว่าลูกค้าในพื้นที่จะได้รับการกดแป้นและฉันก็ออกจาก "โหมดอื่น ๆ " สิ่งที่ฉันต้องการก็แค่ส่งตัวละคร เพื่อแก้ไขข้อบกพร่องนี้ฉันได้เล่นกับ: ^] toggle termdata และ ^] toggle options นี่คือสิ่งที่เกิดขึ้นเมื่อฉันกดCTRL+ Cบนเซิร์ฟเวอร์เทอร์มินัลซึ่งไม่ทำงาน: telnet 10.10.129.101 2012 Trying 10.10.129.101... Connected to termserv-val3 (10.10.129.101). Escape character is '^]'. ^] telnet> toggle options Will show option processing. ^] telnet> toggle termdata Will print hexadecimal representation …

4
เก็บรหัสทางออกเมื่อวางกับ SIGINT และคล้ายกันหรือไม่
หากฉันใช้trapเช่นอธิบายไว้ในhttp://linuxcommand.org/wss0160.php#trapเพื่อจับ ctrl-c (หรือคล้ายกัน) และการล้างข้อมูลก่อนออกจากนั้นฉันจะเปลี่ยนรหัสออกที่ส่งคืน ตอนนี้อาจจะไม่สร้างความแตกต่างในโลกแห่งความเป็นจริง (เช่นเพราะรหัสออกไม่ได้พกพาและด้านบนของที่ไม่โปร่งใสตลอดเวลาตามที่กล่าวไว้ในรหัสทางออกเริ่มต้นเมื่อกระบวนการสิ้นสุดลง? ) แต่ฉันสงสัยว่ามี จริงๆแล้วไม่มีวิธีในการป้องกันและส่งคืนรหัสข้อผิดพลาดเริ่มต้นสำหรับสคริปต์ที่ถูกขัดจังหวะแทนหรือไม่ ตัวอย่าง (เป็น bash แต่คำถามของฉันไม่ควรพิจารณาเฉพาะ bash): #!/bin/bash trap 'echo EXIT;' EXIT read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _ trap 'echo SIGINT; exit 1;' INT read -p 'If you ctrl-c me now …

2
ทำไม wget ของฉันไม่ตายหลังจากการสูญเสียการเชื่อมต่อ ssh?
ฉันsshแก้ไขเซิร์ฟเวอร์ของฉันwget -r -np zzz.aaa/bbb/cccและเริ่มทำงานและมันก็เริ่มทำงาน จากนั้นการเชื่อมต่ออินเทอร์เน็ตของฉัน (ที่บ้านของฉัน) ก็ถูกขัดจังหวะและฉันก็กังวลว่าสมมติว่าwgetมันเป็นhupเพราะการsshเชื่อมต่อขาดหายไปดังนั้นเทอร์มินัลก็เสียชีวิต แต่ฉันsshก็รู้ว่ามันยังทำงานอยู่และวางเอาท์พุทwget.logและดาวน์โหลดสิ่งต่างๆ มีใครช่วยอธิบายให้ฉันฟังหน่อยว่าเกิดอะไรขึ้นที่นี่ นี่คือสิ่งที่psให้ฉัน: PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 32283 0.6 29.4 179824 147088 ? S 14:00 1:53 wget -r -np zzz.aaa/bbb/ccc อะไรที่มันไม่ (เครื่องหมายคำถาม) ?หมายถึงในคอลัมน์ของtty?
13 ssh  terminal  wget  signals 

2
ยกเลิกการเสร็จสิ้น แต่เสร็จสมบูรณ์เท่านั้นใน zsh
เมื่อฟังก์ชั่นเสร็จสิ้นใช้เวลานานฉันสามารถขัดจังหวะโดยกดCtrl+ C(คีย์อินเตอร์รัปต์เทอร์มินัลส่ง SIGINT) หรือCtrl+ G(ผูกไว้กับsend-break) ฉันถูกทิ้งให้อยู่กับคำที่ไม่สมบูรณ์ อย่างไรก็ตามหากฉันกดCtrl+ CหรือCtrl+ Gเมื่อฟังก์ชั่นเสร็จสิ้นการกดปุ่มของฉันอาจยกเลิกบรรทัดคำสั่งและแจ้งให้ฉันทราบทันทีแทนการยกเลิกการเสร็จสิ้น ฉันจะตั้งค่า zsh ได้อย่างไรเพื่อให้บางคีย์จะยกเลิกการเสร็จสิ้นอย่างต่อเนื่อง แต่จะไม่ทำอะไรเลยหากไม่มีฟังก์ชั่นเสร็จสิ้นที่ทำงานอยู่?

1
วิธีการหยุดชั่วคราวและดำเนินการต่อกระบวนการอย่าง bash
คำถามนี้เป็นคำถามต่อไปนี้: วิธีหยุดชั่วคราวและดำเนินกระบวนการต่อ ฉันเริ่ม Firefox จากการทุบตีเซสชันใน gnome-terminal แผนผังกระบวนการมีลักษณะดังนี้: $ ps -e -o pid,ppid,cmd -H 1828 1 gnome-terminal 26677 1828 bash 27980 26677 /bin/sh /usr/lib/firefox-3.6.15/firefox 27985 27980 /bin/sh /usr/lib/firefox-3.6.15/run-mozilla.sh /usr/lib/firefox-3.6.15/firefox-bin 27989 27985 /usr/lib/firefox-3.6.15/firefox-bin 28012 27989 /usr/lib/firefox-3.6.15/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so 27989 plugin true เมื่อฉันCTRL+Zทุบตีมันจะหยุด Firefox เมื่อฉันออกคำสั่งbg(หรือfg) มันจะกลับมาทำงานกับ firefox นี่คือที่คาดไว้ เมื่อฉันออกคำสั่งkill -s SIGTSTP 27980ในเทอร์มินัลอื่นมันจะพิมพ์บรรทัด[1]+ Stopped firefoxในเทอร์มินัลแรก …

1
fork () และสัญญาณถูกส่งไปยังกระบวนการอย่างไร
ฉันโปรแกรมที่ฉันเขียนใน C fork () ปิดกระบวนการลูก กระบวนการจะไม่ยุติ ถ้าฉันเปิดโปรแกรมจากบรรทัดคำสั่งและกด control-c กระบวนการใดที่จะได้รับสัญญาณขัดจังหวะ?
13 process  signals  fork 

3
ควบคุมว่ากระบวนการใดที่จะถูกยกเลิกโดย Ctrl + C
ฉันมีซีดีสดที่บูทเข้าสู่ Linux และรันสคริปต์ Bash ขนาดเล็ก สคริปต์ค้นหาและเรียกใช้โปรแกรมที่สอง (ซึ่งมักจะเป็นไบนารี C ++ ที่คอมไพล์แล้ว) คุณควรจะสามารถที่จะยกเลิกโปรแกรมที่สองโดยการกด+Ctrl Cสิ่งที่ควรเกิดขึ้นก็คือโปรแกรมที่สองหยุดทำงานและสคริปต์ Bash ยังคงทำงานต่อไป สิ่งที่เกิดขึ้นจริงคือทั้งแอปพลิเคชันหลักและสคริปต์ Bash ยุติ ซึ่งเป็นปัญหา ดังนั้นฉันจึงใช้trapbuiltin เพื่อบอก Bash ให้เพิกเฉย SIGINT และตอนนี้Ctrl+ Cยกเลิกแอปพลิเคชัน C ++ แต่ Bash ยังคงทำงานต่อไป ยิ่งใหญ่ โอ้ใช่ ... บางครั้ง "แอปพลิเคชั่นที่สอง" เป็นสคริปต์ Bash อื่น และในที่กรณีCtrl+ Cตอนนี้จะไม่มีอะไร แต่อย่างใด เห็นได้ชัดว่าฉันเข้าใจว่าสิ่งนี้ทำงานอย่างไร ... ฉันจะควบคุมกระบวนการใดที่จะได้รับ SIGINT เมื่อผู้ใช้กดCtrl+ C? ฉันต้องการนำสัญญาณนี้ไปยังกระบวนการที่ระบุเพียงกระบวนการเดียว
13 bash  signals 

2
เทียบเท่ากับ "truss -T" และ "truss -U" บน Linux หรือไม่
มีเทียบเท่าของสิ่งที่-Tและ-Uตัวเลือกของtrussยูทิลิตี้ Solaris ไม่เกี่ยวกับลินุกซ์ สิ่งเหล่านี้คือการระบุการเรียกของระบบ ( -T) หรือฟังก์ชั่นห้องสมุด ( -U) ซึ่งเมื่อเรียกใช้โดยแอปพลิเคชันที่ติดตามจะทำให้เกิดการหยุด หรือกล่าวเป็นอย่างอื่นฉันต้องการให้กระบวนการใด ๆ ที่เริ่มต้นโดยแอปพลิเคชันที่ติดตามแล้วหยุดทำงาน (ราวกับถูกฆ่าโดย SIGSTOP) ทันทีที่ทำการเรียกระบบหรือการเรียกฟังก์ชั่นไลบรารีที่แชร์ straceและltraceบน Linux นั้นมีชุดฟีเจอร์มากมายของ Solaris trussแต่พวกเขาดูเหมือนจะไม่ทำเช่นนั้น ตัวอย่างเช่น truss -f -T open cmd จะเป็นเช่นstrace -f cmdนั้นยกเว้นว่าหากกระบวนการที่ดำเนินการcmdหรือลูกหลานของมันopenเรียกระบบใด ๆมันจะหยุดทันที (และฉันสามารถดำเนินการต่อในภายหลังได้ตามความสะดวกของฉัน) ในบางกรณีฉันสามารถใช้งานgdbได้catch syscallแต่ฉันกำลังมองหาวิธีแก้ปัญหาที่สามารถติดตามส้อมได้อย่างสะดวกและดำเนินการต่อสำหรับกระบวนการทางแยกทั้งหมดและทำexecveต่อไปเรื่อย ๆ ดูเหมือนว่าฉันจะเรียกคืนยูทิลิตี้บางอย่างที่ให้ฟังก์ชั่นเดียวกันแม้แต่หนึ่ง (หรือตัวเลือกสำหรับยูทิลิตี้เดียวกันนั้น) ไปยังแอปพลิเคชันขั้นตอนเดียวระหว่างบางเหตุการณ์ของ syscall บางระยะไกลเช่นนั้น แต่หน่วยความจำของฉัน ที่อยู่บน Linux

3
เทอร์มินัลอีมูเลเตอร์จะฆ่าลูกของพวกเขาได้อย่างไรหลังจากได้รับ SIGKILL?
จากสิ่งที่ฉันเข้าใจ SIGKILL ไม่สามารถถูกจับได้ นี่หมายความว่ากระบวนการไม่มีเวลาฆ่าเด็ก ๆ ก่อนที่ระบบปฏิบัติการจะทำลายมัน สิ่งนี้สามารถแสดงให้เห็นได้ด้วยเชลล์สคริปต์ #! /bin/bash trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless. mplayer video.avi ฆ่าด้วย SIGKILL ทำให้ mplayer ทำงาน $ kill -9 $pid แต่เมื่อใช้เทอร์มินัลอีมูเลเตอร์ (xterm เทอร์มินัล ... ) เด็ก ๆ จะถูกฆ่าพร้อมกับมัน เป็นไปได้อย่างไร? $ mplayer และฆ่ามัน: $ kill -9 $terminal_pid และ mplayer ลงไปกับเรือ เทอร์มินัลอีมูเลเตอร์จับ SIGKILL …

2
SIGINFO บน GNU Linux (Arch Linux) หายไป
ฉันกำลังพัฒนาแอปพลิเคชันและฉันต้องการพิมพ์สถิติรันไทม์บางส่วนไปยังคอนโซลตามต้องการ killและสัญญาณมาถึงใจของฉันทันที การอ่านสัญญาณ Unixบน Wiki SIGINFOดูเหมือนจะเป็นไปได้เพราะ: มันมีไว้สำหรับวัตถุประสงค์เหล่านี้ ไม่ยุติกระบวนการหากไม่มีการใช้งานตัวจัดการสัญญาณ (ตรงกันข้ามกับSIGUSRx- ดูที่นี่ ) อย่างไรก็ตามโดยการตรวจสอบผลลัพธ์ของkill -lดูเหมือนว่าเซิร์ฟเวอร์ของฉันไม่ได้ใช้สัญญาณนี้ คำถามของฉันคือ: ทำไมSIGINFOระบบของฉันถึงหายไป มันหายไปกับระบบ GNU Linux ทั้งหมดหรือไม่? มีวิธีง่าย ๆ (เช่นไม่มีเคอร์เนล / glibc recompilation) เพื่อเปิดใช้งานสัญญาณนี้หรือไม่? ถ้าไม่มีสิ่งใดจะเป็นวิธีที่ยาก? ฉันสามารถใช้สัญญาณทางเลือกใดเพื่อจุดประสงค์ของฉันที่จะไม่ทำให้เกิดผลข้างเคียงใด ๆหากไม่ได้รับการจัดการโดยกระบวนการเป้าหมาย (ฉันไม่คิดเลยเพราะฉันไม่สามารถหาสัญญาณอื่นที่เหมาะสมในคู่มือของglibc ) Linux metainfo: Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux อัปเดต:ฉันยังคงค้นหาข้อมูลเพิ่มเติมว่าทำไมสัญญาณนี้จึงถูกแยกแบบมีเงื่อนไขจากระบบอื่นที่ไม่ใช่ BSD (ดูความคิดเห็นด้านล่าง) …
12 linux  signals  glibc 

1
คำสั่ง pkill -USR1 -n -x dd หมายความว่าอย่างไร
ฉันใช้ddเพื่อถ่ายโอนข้อมูลภาพดิสก์ไปยังการ์ด sd บน BeagleBone ของฉัน การใช้pkill -USR1 -n -x ddการเชื่อมต่อ ssh กับ BeagleBone นี้ทำให้ฉันได้รับการอัพเดตสถานะของกระบวนการถ่ายโอนซึ่งยอดเยี่ยมมาก ฉันแค่อยากรู้ว่ามันใช้งานได้จริงอย่างไรเพื่อที่ฉันจะสามารถใช้มันได้อย่างมีประสิทธิภาพในอนาคต หลังจากอ่านman pkillแล้วมันยังไม่ได้อธิบายอย่างสมบูรณ์ถึงวิธีการpkill -USR1 -n -x ddทำงานเพื่อให้การอัปเดตสถานะนี้มีประโยชน์มากกับฉัน
12 kill  dd  signals 

3
สัญญาณ 0 ในคำสั่ง Trap คืออะไร?
ฉันทำตามคำแนะนำนี้เกี่ยวกับวิธีการตั้งค่าการรับรองความถูกต้อง SSH แบบไม่มีรหัสผ่านกับ ssh-agent ในการเริ่มต้น ssh-agent ผู้เขียนแนะนำรหัสต่อไปนี้ใน.bash_profile: SSHAGENT=/usr/bin/ssh-agent SSHAGENTARGS="-s" if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then eval `$SSHAGENT $SSHAGENTARGS` trap "kill $SSH_AGENT_PID" 0 fi ฉันไม่เข้าใจว่าทำไมมันถึงเป็นกับดักสัญญาณ 0 ตามสัญญาณของมนุษย์ 7ไม่มีสัญญาณดังกล่าว นี่เป็นเพียงการพิมพ์ผิดหรือข้อผิดพลาดหรือทำสิ่งนี้สำเร็จหรือไม่
12 bash  signals  trap 

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