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

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

4
Segmentation Fault ทำงานอย่างไรภายใต้ประทุน?
ฉันไม่สามารถหาข้อมูลใด ๆ นอกเหนือไปจาก "MMU ของ CPU ส่งสัญญาณ" และ "เคอร์เนลนำมันไปยังโปรแกรมที่ละเมิดทำให้ยุติ" "Segmentation fault"ฉันคิดว่ามันอาจจะส่งสัญญาณไปยังเปลือกและเปลือกจัดการกับมันโดยยกเลิกกระบวนการที่กระทำผิดและการพิมพ์ ดังนั้นฉันทดสอบสมมติฐานโดยการเขียนเชลล์ที่น้อยที่สุดที่ฉันเรียกว่าcrsh (crap shell) เชลล์นี้ไม่ได้ทำอะไรเลยนอกจากเอาข้อมูลผู้ใช้และป้อนไปยังsystem()วิธีการ #include <stdio.h> #include <stdlib.h> int main(){ char cmdbuf[1000]; while (1){ printf("Crap Shell> "); fgets(cmdbuf, 1000, stdin); system(cmdbuf); } } ดังนั้นฉันจึงวิ่งเปลือกนี้ใน terminal เปลือย (โดยไม่ต้องbashวิ่งภายใต้) จากนั้นฉันก็ดำเนินการเรียกใช้โปรแกรมที่สร้าง segfault หากสมมติฐานของฉันถูกต้องสิ่งนี้อาจจะเป็น) ความผิดพลาดcrshปิด xterm, b) ไม่พิมพ์"Segmentation fault"หรือ c) ทั้งสองอย่าง braden@system ~/code/crsh/ …

4
ส่งต่อ SIGTERM ให้กับเด็กใน Bash
ฉันมี Bash script ซึ่งมีลักษณะคล้ายกับนี้: #!/bin/bash echo "Doing some initial work...."; /bin/start/main/server --nodaemon ตอนนี้ถ้า bash shell ที่เรียกใช้สคริปต์ได้รับสัญญาณ SIGTERM ก็ควรส่ง SIGTERM ไปยังเซิร์ฟเวอร์ที่กำลังรันอยู่ เป็นไปได้ไหม
86 bash  shell  signals  docker 

2
วิธีส่งสัญญาณการสิ้นสุดของอินพุต stdin
ใน Bash ฉันเรียนรู้ว่าเอกสารสิ้นสุดสามารถเปลี่ยนแปลงได้ที่นี่ แต่โดยค่าเริ่มต้นฉันจะส่งสัญญาณจุดสิ้นสุดของอินพุต stdin ได้อย่างไร ฉันบังเอิญพบว่าด้วย cat และ chardet อินพุต stdin สามารถส่งสัญญาณได้โดยกด Ctrl + d แต่ดูเหมือนว่าฉันจะจำได้ว่า Ctrl + d และ Ctrl + c คล้ายกับการสิ้นสุดการทำงานของคำสั่งที่กำลังทำงานอยู่ ดังนั้นฉันผิด

6
ฉันจะตรวจสอบสัญญาณที่กระบวนการกำลังรับฟังได้อย่างไร?
ฉันจะตรวจสอบว่ากระบวนการที่กำลังทำงานอยู่จะจับสัญญาณหรือเพิกเฉยหรือบล็อกได้อย่างไร โดยหลักการแล้วฉันต้องการดูรายการสัญญาณหรืออย่างน้อยก็ไม่จำเป็นต้องส่งสัญญาณเพื่อตรวจสอบ
81 process  signals 

3
“ กับดัก…ออกจากระยะเวลา” จำเป็นจริงๆหรือ?
ตัวอย่างมากมายสำหรับtrapใช้trap ... INT TERM EXITสำหรับงานการล้างข้อมูล แต่มันจำเป็นจริงๆหรือไม่ที่จะแสดงรายการทั้งสาม sigspecs? คู่มือบอกว่า: หาก SIGNAL_SPEC เป็น EXIT (0) ARG จะถูกดำเนินการเมื่อออกจากเปลือก ซึ่งผมเชื่อว่าไม่ว่าจะใช้สคริปต์เสร็จได้ตามปกติหรือมันเสร็จเพราะมันได้รับหรือSIGINT SIGTERMการทดลองยืนยันความเชื่อของฉันด้วย: $ cat ./trap-exit #!/bin/bash trap 'echo TRAP' EXIT sleep 3 $ ./trap-exit & sleep 1; kill -INT %1 [1] 759 TRAP [1]+ Interrupt ./trap-exit $ ./trap-exit & sleep 1; kill -TERM %1 [1] …
63 bash  shell  signals  trap 

5
ทำไม SIGINT ถึงไม่แพร่กระจายไปยังกระบวนการลูกเมื่อส่งไปยังกระบวนการแม่
ด้วยกระบวนการเชลล์ (เช่นsh) และกระบวนการลูก (เช่นcat) ฉันจะจำลองพฤติกรรมของCtrl+ Cโดยใช้ ID กระบวนการของเชลล์ได้อย่างไร นี่คือสิ่งที่ฉันได้ลอง: วิ่งshแล้วcat: [user@host ~]$ sh sh-4.3$ cat test test ส่งSIGINTไปcatจากสถานีอื่น: [user@host ~]$ kill -SIGINT $PID_OF_CAT cat รับสัญญาณและยกเลิก (ตามที่คาดไว้) ดูเหมือนว่าการส่งสัญญาณไปยังกระบวนการหลักนั้นไม่ทำงาน ทำไมสัญญาณไม่แพร่กระจายไปcatเมื่อถูกส่งไปยังกระบวนการแม่sh? สิ่งนี้ไม่ทำงาน: [user@host ~]$ kill -SIGINT $PID_OF_SH
62 shell  process  signals 


4
รหัสการออกเริ่มต้นเมื่อกระบวนการยุติลง?
เมื่อกระบวนการถูกฆ่าด้วยสัญญาณที่จับได้เช่นSIGINTหรือSIGTERMแต่ไม่จัดการสัญญาณสิ่งที่จะเป็นรหัสทางออกของกระบวนการ? สิ่งที่เกี่ยวกับสัญญาณที่SIGKILLไม่สามารถจัดการได้เป็นอย่างไร จากสิ่งที่ผมสามารถบอกได้ฆ่ากระบวนการที่มีSIGINTผลแนวโน้มในรหัสทางออก130แต่ที่แตกต่างกันโดย kernel หรือการดำเนินเปลือก? $ cat myScript #!/bin/bash sleep 5 $ ./myScript <ctrl-c here> $ echo $? 130 ฉันไม่แน่ใจว่าฉันจะทดสอบสัญญาณอื่น ๆ ได้อย่างไร ... $ ./myScript & $ killall myScript $ echo $? 0 # duh, that's the exit code of killall $ killall -9 myScript $ echo $? 0 # …

7
หมดเวลาในเชลล์สคริปต์
ฉันมีสคริปต์เชลล์ที่อ่านจากอินพุตมาตรฐาน ในกรณีที่หายากจะมีไม่มีใครพร้อมที่จะให้การป้อนข้อมูลและสคริปต์ที่ต้องหมดเวลา ในกรณีที่หมดเวลาสคริปต์จะต้องเรียกใช้โค้ดการล้างข้อมูล วิธีที่ดีที่สุดในการทำเช่นนั้นคืออะไร? สคริปต์นี้ต้องพกพาได้มากรวมถึงระบบยูนิกซ์ในศตวรรษที่ 20 ที่ไม่มีคอมไพเลอร์ C และอุปกรณ์ฝังตัวที่ใช้งานอยู่ในขณะนี้ดังนั้น Perl, ทุบตี, ภาษาใด ๆ ที่คอมไพล์และแม้แต่ POSIX.2 แบบเต็มไม่สามารถพึ่งพาได้ โดยเฉพาะอย่างยิ่ง$PPID, read -tและกับดักที่ดีเลิศ POSIX สอดคล้องไม่สามารถใช้ได้ การเขียนไปยังไฟล์ชั่วคราวจะถูกแยกออกเช่นกัน สคริปต์อาจทำงานแม้ว่าระบบไฟล์ทั้งหมดจะถูกเมาท์แบบอ่านอย่างเดียว เพียงเพื่อทำให้สิ่งต่าง ๆ ยากขึ้นฉันยังต้องการให้สคริปต์มีความรวดเร็วพอสมควรเมื่อไม่ได้หมดเวลา โดยเฉพาะอย่างยิ่งฉันยังใช้สคริปต์ใน Windows (ส่วนใหญ่ใน Cygwin) โดยที่ fork และ exec มีระดับต่ำโดยเฉพาะดังนั้นฉันจึงต้องการใช้ให้น้อยที่สุด โดยสรุปฉันมี trap cleanup 1 2 3 15 foo=`cat` และฉันต้องการเพิ่มการหมดเวลา ฉันไม่สามารถแทนที่catด้วยในreadตัว ในกรณีที่หมดเวลาฉันต้องการใช้งานcleanupฟังก์ชั่น พื้นหลัง: สคริปต์นี้คาดเดาการเข้ารหัสของเครื่องโดยพิมพ์อักขระ 8 บิตและเปรียบเทียบตำแหน่งเคอร์เซอร์ก่อนและหลัง …
53 shell  signals  timeout 

9
การยกเลิกการวนซ้ำไม่สิ้นสุด
ฉันมีคำสั่งที่ฉันต้องการให้ทำงานอีกครั้งโดยอัตโนมัติในแต่ละครั้งที่มันสิ้นสุดลงดังนั้นฉันจึงทำสิ่งนี้: while [ 1 ]; do COMMAND; done; แต่ถ้าฉันหยุดลูปไม่ได้Ctrl-cเพราะมันฆ่าCOMMANDแล้วไม่ใช่ลูปทั้งหมด ฉันจะทำสิ่งที่คล้ายกันได้อย่างไร แต่ฉันสามารถหยุดได้โดยไม่ต้องปิดเครื่อง
52 bash  signals 

9
ไม่สามารถหยุดสคริปต์ทุบตีด้วย Ctrl + C
ฉันเขียนสคริปต์ทุบตีง่าย ๆ ด้วยวนสำหรับพิมพ์วันที่และ ping ไปยังเครื่องระยะไกล: #!/bin/bash while true; do # *** DATE: Thu Sep 17 10:17:50 CEST 2015 *** echo -e "\n*** DATE:" `date` " ***"; echo "********************************************" ping -c5 $1; done เมื่อฉันเรียกใช้จากเทอร์มินัลฉันไม่สามารถหยุดมันCtrl+Cได้ ดูเหมือนว่าจะส่ง^Cไปยังเทอร์มินัล แต่สคริปต์ไม่หยุด MacAir:~ tomas$ ping-tester.bash www.google.com *** DATE: Thu Sep 17 23:58:42 CEST 2015 *** ******************************************** PING …
42 bash  terminal  signals 

6
การกด ctrl-c หลาย ๆ ครั้งทำให้โปรแกรมที่กำลังรันปิดเร็วขึ้นหรือไม่?
ฉันมักจะเริ่มอ่านไฟล์ขนาดใหญ่แล้วต้องการออกหลังจากนั้นไม่นาน แต่มีความล่าช้าในการกดCtrl+ Cเพื่อหยุดโปรแกรม มีโอกาสที่จะลดความล่าช้าโดยการกดปุ่มCtrl+ Cหลาย ๆ ครั้งหรือไม่? หรือฉันจะสูญเสียการกดคีย์ของฉัน
41 process  kill  signals 

4
จะเกิดอะไรขึ้นเมื่อผู้ใช้ที่ไม่ใช่รูทส่งสัญญาณไปยังกระบวนการของผู้ใช้รูท
ฉันสงสัยเกี่ยวกับความปลอดภัยของสัญญาณ UNIX SIGKILLจะฆ่ากระบวนการ ดังนั้นจะเกิดอะไรขึ้นเมื่อกระบวนการของผู้ใช้ที่ไม่ใช่รูทส่งสัญญาณไปยังกระบวนการของผู้ใช้รูท กระบวนการยังคงดำเนินการตัวจัดการสัญญาณหรือไม่? ฉันทำตามคำตอบที่ยอมรับ (gollum's) และฉันพิมพ์man capabilitesและฉันพบสิ่งต่าง ๆ มากมายเกี่ยวกับเคอร์เนล Linux จากman capabilities : NAME capabilities - overview of Linux capabilities DESCRIPTION For the purpose of performing permission checks, traditional UNIX implementations distinguish two categories of processes: privileged processes (whose effective user ID is 0, referred to as superuser …
33 security  signals 

1
ความแตกต่างระหว่างสัญญาณการฆ่าที่รุนแรงน้อยกว่า --HUP (1) -INT (2) และ -TERM (15)
นอกเหนือจากความรุนแรงที่สุดkill -9(SIGKILL) ฉันไม่เข้าใจความแตกต่างระหว่างสัญญาณทั่วไปอื่น ๆ อีก 3 ตัว ( ที่นี่ ) -HUP(1), 1 -INT(2) และ-TERM(15) ในสถานการณ์ใดที่หนึ่งจะทำงานและอื่น ๆ ไม่ได้? โดยทั่วไปแล้ว-9( -KILL) จะล้มเหลวเมื่อใด สำหรับผมแล้วพวกเขาดูเหมือนจะขอให้กระบวนการที่จะยุติได้อย่างสง่างาม , โดยไม่ต้องบันทึก -HUP < -TERM < -INT < -KILLการจัดอันดับความรุนแรงที่ฉันจะใส่
32 kill  signals 

2
รับพฤติกรรมของโปรแกรมเมื่อสังหาร -HUP แล้วหรือยัง
มีวิธีใดบ้างที่จะทราบว่าโปรแกรมจะทำอะไรเมื่อได้รับสัญญาณการฆ่า HUP โดยไม่ต้องรันคำสั่ง ofc: D ตัวอย่างเช่น killall -HUP pppdจะรีสตาร์ท pppd killall -HUP firefoxเพียง แต่จะฆ่า firefox
32 kill  signals 

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