`kill -p` ใช้ได้ผลจริงหรือ


11

ในหน้า man ของkillมันเขียนดังต่อไปนี้

สรุป

  kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
  kill -l [ signal ]

  -p     Specify  that kill should only print the process id (pid) of the
          named processes, and not send any signals.

แต่เมื่อฉันลองทั้งสองครั้งทั้ง RH และ RHEL คำสั่งkill -s SIGHUP |-p 123ไม่เคยทำงานและมีรายงานข้อผิดพลาดอยู่เสมอ

bash: -p: ไม่พบคำสั่ง

ฉันทำผิดพลาดหรือไม่?


11
โปรดทราบว่าเมื่อคุณพิมพ์คำสั่งคุณลบ[ ]วงเล็บและแทนที่signalด้วยSIGHUPและpidด้วย123? ทำไมคุณทำอย่างนั้น? เพราะคุณรู้ว่าสัญลักษณ์[, signalและpidมีเมตาประโยคมากกว่าตัวอักษร พวกเขาระบุว่าไวยากรณ์คืออะไร ดี|สัญลักษณ์เป็นสิ่งเดียวกัน: อีกตัวบ่งชี้ meta-ประโยคไวยากรณ์ [a | b]หมายถึง: รายการเสริมทางเลือกซึ่งอาจเป็นaหรือb(แต่ไม่ใช่ทั้งสองเนื่องจากต้องเป็นหนึ่งรายการ)
Kaz

ขอบคุณสำหรับคำแนะนำของคุณ โดยวิธีการที่คุณออกเสียง[a | b]อย่างไร
user43312

อืมมม "ตัวเลือก A หรือ B"
Kaz

คำตอบ:


51
kill [ -s signal | -p ]

ไวยากรณ์นี้ในหน้าคู่มือหมายถึง:

คุณสามารถใช้kill -s signal หรือคุณสามารถใช้kill -pแต่คุณไม่สามารถใช้ทั้งสอง-sและ-pในเวลาเดียวกัน

ไปป์ ( |) ย่อมาจาก (พิเศษ) หรือในเอกสารประกอบนั้นไม่ได้เป็นส่วนหนึ่งของคำสั่ง

เมื่อคุณพิมพ์

foo | bar

ในเชลล์ของคุณมันจะพยายามเริ่มต้นfooและbarและไพพ์เอาต์พุตของfooไปยังbarโปรแกรม (นั่นคือเชลล์ทำเช่นนั้นไม่ใช่foo(หรือbar), |จะไม่ถูกส่งไปยังกระบวนการใด ๆ ) ในกรณีของคุณส่วนที่สองคือ-p 123เชลล์จึงพยายามค้นหาไฟล์เรียกทำงานที่เรียกใช้-pและล้มเหลวพร้อมกับข้อความแสดงข้อผิดพลาดนั้น


ขอบคุณ @ Mat kill -p 123ดังนั้นผมจึงให้คำสั่งเช่น bash: kill: p: invalid signal specificationมันบอกว่า และkill -p SIGINT 123พูดในสิ่งเดียวกัน ฉันไม่คิดว่าจะมีสถานที่ที่จะวางสัญญาณตามไวยากรณ์ คุณสนใจไหมถ้าคุณแค่สาธิตการใช้งาน-pตัวเลือกนี้?
user43312

2
@ user43312: ดูคำตอบของ slm
Mat

32

ฉันคิดว่าคุณกำลังจะสะดุดกับความจริงที่ว่ามีคำสั่ง builtin จะทุบตีเรียกว่าพร้อมกับคำสั่งkillkill

$ type -a kill
kill is a shell builtin
kill is /usr/bin/kill
kill is /bin/kill

หน้าคนที่คุณกำลังอ่านหมายถึงkillคำสั่งที่อยู่ด้าน/binล่าง ใช้เส้นทางแบบเต็มเพื่อเรียกใช้:

$ /bin/kill -p sleep
16486

อนึ่งเป็นเพียงการเชื่อมโยงไปยัง/usr/bin/kill/bin/kill

$ ls -l /usr/bin/kill
lrwxrwxrwx 1 root root 14 Feb  9  2011 /usr/bin/kill -> ../../bin/kill

$ readlink -m /usr/bin/kill
/bin/kill

มันใช้งานได้จริง และฉันขอขอบคุณสำหรับการสาธิตทั้งหมด
user43312

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