มันบอกว่ามันส่งสัญญาณไปยังสมาชิกทั้งหมดของกลุ่มกระบวนการของผู้โทร
กลุ่มกระบวนการใช้เพื่อใช้การควบคุมงานในเชลล์ (สามารถใช้กับสิ่งอื่นได้ แต่การควบคุมงานเชลล์แบบโต้ตอบเป็นเหตุผลหลักสำหรับการมีอยู่ของพวกเขา)
คุณจะสังเกตเห็นว่าเมื่อคุณพิมพ์Ctrl-Cกระบวนการทั้งหมดของงานปัจจุบันจะถูกฆ่าไม่เพียงกระบวนการที่เริ่มต้นเท่านั้น นอกจากนี้ที่ไม่ฆ่างานพื้นหลัง
นั่นคือความสำเร็จกับกลุ่มกระบวนการ งานคือกลุ่มของกระบวนการที่เริ่มต้นโดยเชลล์ซึ่งเชลล์สามารถใส่ในพื้นหลังหรือเบื้องหน้า (ตั้งค่าเป็นกลุ่มกระบวนการพื้นหน้าของเทอร์มินัลหรือไม่) และฆ่าโดยรวม
คุณสามารถค้นหาข้อมูลเกี่ยวกับรหัสกลุ่มกระบวนการและรหัสเซสชันด้วยps -j
( j
สำหรับJการควบคุม ob)
หากต้องการฆ่ากลุ่มกระบวนการของ PGID $x
คุณต้องทำดังนี้
kill -- "-$x"
kill 0
ฆ่ากลุ่มกระบวนการของผู้โทร
โปรดทราบว่าหากคุณ: /bin/kill 0
เชลล์จะเริ่มงานใหม่เพื่อรันkill
คำสั่งนั้นดังนั้นkill
จะฆ่าตัวเองเท่านั้น
kill
โดยปกติแล้วจะเป็นตัวเชลล์ในตัวดังนั้นkill
จะฆ่ากลุ่มกระบวนการของเชลล์
อย่างไรก็ตามเมื่อเชลล์เป็นแบบโต้ตอบมันเป็นกระบวนการจัดการกลุ่มกระบวนการดังนั้นโดยทั่วไปจะไม่มีกระบวนการอื่นในกลุ่มกระบวนการของเชลล์ กระบวนการทั้งหมดเริ่มต้นโดยเชลล์อยู่ในกลุ่มกระบวนการอื่น:
$ sleep 1000 &
[1] 22746
$ ps -j
PID PGID SID TTY TIME CMD
22735 22735 22735 pts/23 00:00:00 zsh
22746 22746 22735 pts/23 00:00:00 sleep
22749 22749 22735 pts/23 00:00:00 ps
ด้านบนsleep
และps
อยู่ในกลุ่มกระบวนการที่แตกต่างกันสองกลุ่มกลุ่มหนึ่งอยู่ในพื้นหลังกลุ่มหนึ่งอยู่เบื้องหน้าและกลุ่มเหล่านั้นแตกต่างจากกลุ่มกระบวนการของเชลล์
คุณสามารถทำได้:
(man kill & sleep 1; ps -j; kill 0)
เชลล์แบบโต้ตอบจะเริ่มกลุ่มกระบวนการใหม่สำหรับ subshell นั้นและทั้ง subshell และ man (และคำสั่งอื่น ๆ ที่เริ่มต้นโดยมนุษย์เช่นเพจเจอร์ของคุณ groff ... ) จะอยู่ในกลุ่มกระบวนการเดียวกันดังนั้นkill 0
จะทำงานที่นั่น ( sleep
ด้านบนคือให้เวลามากพอที่เพจเจอร์จะเริ่มเพื่อให้เราสามารถดูได้ในps -j
เอาต์พุตก่อนที่เราจะฆ่ามัน)
SIGTERM
ไปยังกระบวนการซึ่งได้ทำman
คำสั่งได้เลือกที่จะไม่สนใจมัน